API подсказок по номеру телефона — библиотека на базе сервисов Google Play — предоставляет удобный способ отображения телефонных номеров пользователя (на SIM-карте) в качестве подсказки.
Преимущества использования подсказки по номеру телефона включают в себя следующее:
- Никаких дополнительных запросов на разрешение не требуется.
- Устраняет необходимость ручного ввода номера телефона пользователем.
- Аккаунт Google не нужен.
- Не связано напрямую с процессами входа в систему или регистрации
- Более широкая поддержка версий Android по сравнению с Autofill
Как это работает
API подсказки номера телефона использует PendingIntent
для инициирования потока. После запуска PendingIntent пользователю будет представлен пользовательский интерфейс, в котором перечислены все (на основе SIM) телефонные номера. Затем пользователь может выбрать номер телефона, который он хотел бы использовать, или отменить поток. Выбранный номер телефона затем будет доступен разработчику для извлечения из Intent
.

Чтобы подготовить свое приложение, выполните действия, описанные в следующих разделах.
Настройте свое приложение
Добавьте зависимость сервисов 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") }
Ява
ActivityResultLauncherphoneNumberHintIntentResultLauncher = ... 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") } }
Ява
ActivityResultLauncherphoneNumberHintIntentResultLauncher = 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); } } });