Подсказка по номеру телефона

Библиотека Phone Number Hint API, работающая на базе сервисов Google Play , предоставляет простой способ отображения телефонных номеров пользователя (на основе SIM-карты) в качестве подсказки.

К преимуществам использования приложения «Подсказка по номеру телефона» относятся следующие:

  • Дополнительные запросы на получение разрешений не требуются.
  • Устраняет необходимость ручного ввода номера телефона пользователем.
  • Аккаунт Google не требуется.
  • Не имеет прямой связи с процессами входа в систему или регистрации.
  • Более широкая поддержка версий Android по сравнению с функцией автозаполнения.

Как это работает

API подсказок по номеру телефона использует PendingIntent для запуска процесса. После запуска PendingIntent пользователю будет показан пользовательский интерфейс со списком всех телефонных номеров (на основе SIM-карт). Затем пользователь может выбрать номер телефона, который он хотел бы использовать, или отменить процесс. Выбранный номер телефона будет доступен разработчику для получения из Intent .

Интерфейс и настройки подсказки по номеру телефона.
Рисунок 1. Интерфейс и настройки подсказки по номеру телефона.

Для подготовки приложения выполните действия, описанные в следующих разделах.

Настройте свое приложение

Добавьте зависимость от сервисов Google Play для API подсказки номера телефона в файл сборки Gradle вашего модуля , который обычно находится по адресу app/build.gradle :

  apply plugin: 'com.android.application'

  ...

  dependencies {
    implementation 'com.google.android.gms:play-services-auth:21.5.0'
  }

Создайте объект GetPhoneNumbeHintIntentRequest.

Для начала создайте объект GetPhoneNumberHintIntentRequest используя предоставленный метод GetPhoneNumberHintIntentRequest.Builder() . Затем этот объект запроса можно использовать для получения Intent , который запустит процесс подсказки номера телефона.

Котлин

val request: GetPhoneNumberHintIntentRequest = GetPhoneNumberHintIntentRequest.builder().build()

Java

GetPhoneNumberHintIntentRequest request = GetPhoneNumberHintIntentRequest.builder().build();

Подсказка по номеру телефона для запроса

Вызовите SignInClient.getPhoneNumberHintIntent() , передав в качестве параметра предыдущий объект GetPhoneNumberHintIntentRequest , чтобы получить объект PendingIntent и запустить процесс получения подсказки по номеру телефона.

Котлин

val phoneNumberHintIntentResultLauncher = ...

Identity.getSignInClient(activity)
.getPhoneNumberHintIntent(request)
.addOnSuccessListener { result: PendingIntent ->
  try {
    phoneNumberHintIntentResultLauncher.launch(
      IntentSenderRequest.Builder(result).build()
    )
  } catch (e: Exception) {
      Log.e(TAG, "Launching the PendingIntent failed")
  }
}
.addOnFailureListener {
    Log.e(TAG, "Phone Number Hint failed")
}

Java

ActivityResultLauncher phoneNumberHintIntentResultLauncher = ...

Identity.getSignInClient(activity)
  .getPhoneNumberHintIntent(request)
  .addOnSuccessListener( result -> {
      try {
          phoneNumberHintIntentResultLauncher.launch(result.getIntentSender());
      } catch(Exception e) {
          Log.e(TAG, "Launching the PendingIntent failed", e);
      }
  })
  .addOnFailureListener(e -> {
      Log.e(TAG, "Phone Number Hint failed", e);
  });

Получение номера телефона

Передайте Intent в метод SignInClient.getPhoneNumberFromIntent , чтобы получить номер телефона.

Котлин

val phoneNumberHintIntentResultLauncher =
registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { result ->
      try {
          val phoneNumber = Identity.getSignInClient(activity).getPhoneNumberFromIntent(result.data)
      } catch(e: Exception) {
          Log.e(TAG, "Phone Number Hint failed")
      }
  }

Java

ActivityResultLauncher phoneNumberHintIntentResultLauncher =
  registerForActivityResult(
      new ActivityResultContracts.StartActivityForResult(),
      new ActivityResultCallback() {
          @Override
          public void onActivityResult(ActivityResult result) {
              try {
                  String phoneNumber = Identity.getSignInClient(activity).getPhoneNumberFromIntent(result.getData());
              } catch {
                  Log.e(TAG, "Phone Number Hint failed", e);
              }
          }
  });