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

API подсказок по номеру телефона — библиотека на базе сервисов Google Play — предоставляет удобный способ отображения телефонных номеров пользователя (на SIM-карте) в качестве подсказки.

Преимущества использования подсказки по номеру телефона включают в себя следующее:

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

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

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.3.0'
  }

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

Начните с создания объекта GetPhoneNumberHintIntentRequest с помощью предоставленного метода GetPhoneNumberHintIntentRequest.Builder() . Этот объект запроса затем можно использовать для получения Intent для запуска потока Phone Number Hint.

Котлин

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

Ява

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")
}

Ява

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")
      }
  }

Ява

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);
              }
          }
  });