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 numerów telefonów użytkownika (na podstawie karty SIM) jako podpowiedzi.

Zalety korzystania z wskazówek dotyczących 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ę i rejestracji;
  • szersza obsługa wersji Androida niż w autouzupełnianiu,

Zanim zaczniesz

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

Konfiguracja 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'
  }

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 do pobrania z Intent.

Interfejs i ustawienia podpowiedzi numeru telefonu.
Rysunek 1. Interfejs i ustawienia podpowiedzi dotyczących numeru telefonu

Tworzenie obiektu GetPhoneNumbeHintIntentRequest

Zacznij od utworzenia obiektu GetPhoneNumberHintIntentRequest za pomocą podanej metody GetPhoneNumberHintIntentRequest.Builder(). Następnie obiekt żądania może służyć do uzyskiwania obiektu Intent, który uruchamia przepływ danych w przypadku podpowiedzi numeru telefonu.

KotlinJava
val request: GetPhoneNumberHintIntentRequest = GetPhoneNumberHintIntentRequest.builder().build()
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 zainicjuje przepływ podpowiedzi numeru telefonu.

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

Pobieranie numeru telefonu

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

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