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

Phone Number Hint API – это библиотека на основе сервисов Google Play, которая позволяет показывать пользователю номера телефонов, связанные с его SIM-картой, в качестве подсказки.

Вот некоторые преимущества использования Phone Number Hint API:

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

Принцип работы

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

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

Чтобы подготовить приложение, выполните нужные действия в разделах, указанных ниже.

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

Добавьте зависимость сервисов Google Play для Phone Number Hint API в файл build.gradle модуля – обычно это app/build.gradle:

  apply plugin: 'com.android.application'

  ...

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

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

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

Kotlin

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

Java

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

Запрос подсказки номера телефона

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

Kotlin

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<Intent> 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, чтобы получить номер телефона.

Kotlin

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<Intent> phoneNumberHintIntentResultLauncher =
    registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                try {
                    String phoneNumber = Identity.getSignInClient(activity).getPhoneNumberFromIntent(result.getData());
                } catch {
                    Log.e(TAG, "Phone Number Hint failed", e);
                }
            }
    });