Podpowiedź dotycząca numeru telefonu

Interfejs API podpowiedzi numeru telefonu to biblioteka obsługiwana przez usługi Google Play, która umożliwia wyświetlanie podpowiedzi dotyczących numerów telefonu użytkownika (na podstawie karty SIM).

Zalety korzystania z podpowiedzi numeru telefonu:

  • Nie trzeba prosić o dodatkowe uprawnienia
  • Użytkownik nie musi ręcznie wpisywać numeru telefonu.
  • Nie musisz mieć konta Google.
  • nie są bezpośrednio powiązane z procesami logowania się lub rejestracji;
  • szersza obsługa wersji Androida niż w autouzupełnianiu,

Jak to działa

Interfejs Phone Number Hint API używa PendingIntent do inicjowania przepływu. Po uruchomieniu PendingIntent użytkownik zobaczy interfejs z listą wszystkich numerów telefonów (na podstawie karty SIM). Użytkownik może wybrać numer telefonu, którego chce użyć, lub anulować proces. Wybrany numer telefonu będzie dostępny dla dewelopera, który może go pobrać z Intent.

Interfejs i ustawienia podpowiedzi numeru telefonu.
Rysunek 1. Interfejs i ustawienia podpowiedzi numeru telefonu

Aby przygotować aplikację, wykonaj czynności opisane w poniższych sekcjach.

Konfigurowanie aplikacji

Dodaj zależność Usług Google Play do interfejsu Phone Number Hint API do pliku build.gradle modułu. Jest to zwykle app/build.gradle:

  apply plugin: 'com.android.application'

  ...

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

Tworzenie obiektu GetPhoneNumbeHintIntentRequest

Zacznij od utworzenia obiektu GetPhoneNumberHintIntentRequest za pomocą podanej metody GetPhoneNumberHintIntentRequest.Builder(). Ten obiekt żądania może być następnie użyty do uzyskania Intent, aby rozpocząć przepływ podpowiedzi numeru telefonu.

Kotlin

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

Java

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

Prośba o podpowiedź dotyczącą numeru telefonu

Wywołaj funkcję SignInClient.getPhoneNumberHintIntent(), przekazując poprzedni obiekt GetPhoneNumberHintIntentRequest, aby pobrać obiekt PendingIntent, który umożliwi zainicjowanie procesu podpowiedzi numeru telefonu.

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

Pobieranie numeru telefonu

Przekaż parametr Intent do funkcji SignInClient.getPhoneNumberFromIntent, aby pobrać numer telefonu.

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