Wskazówka dotycząca numeru telefonu

Phone Number Hint API, biblioteka z Usługami Google Play, umożliwia płynne wyświetlanie numerów telefonu użytkownika (opartych na karcie SIM).

Zalety korzystania z podpowiedzi dotyczących numeru telefonu:

  • Nie potrzeba żadnych dodatkowych uprawnień
  • Eliminuje potrzebę ręcznego wpisywania numeru telefonu.
  • Nie potrzebujesz konta Google
  • Nie są bezpośrednio powiązane z procesami logowania i rejestracji
  • Lepsza obsługa wersji Androida niż autouzupełnianie

Zanim zaczniesz

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

Konfigurowanie aplikacji

W pliku build.gradle na poziomie projektu dodaj repozytorium Maven Google i buildscript oraz allprojects:

buildscript {
  repositories {
    google()
    mavenCentral()
  }
}

allprojects {
  repositories {
    google()
    mavenCentral()
  }
}

Dodaj zależność między Usługami Google Play a zależnością interfejsu Phone Number Hint API do pliku kompilacji Gradle, który zazwyczaj jest app/build.gradle:

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

Jak to działa

Interfejs Phone Number Hint API używa PendingIntent do inicjowania procesu. Po uruchomieniu PendingIntent użytkownik zobaczy interfejs z listą wszystkich numerów telefonów (na karcie SIM). Użytkownik może następnie wybrać numer telefonu, z którego chce korzystać, lub anulować procedurę. Wybrany numer telefonu zostanie udostępniony deweloperowi, aby mógł go pobrać z Intent.

UI wskazówek dotyczących numerów telefonów i ich ustawienia.
Rysunek 1. Ustawienia i wskazówki dotyczące numeru telefonu

Tworzenie obiektu GetPhoneNumbeHintIntentRequest

Zacznij od utworzenia obiektu GetPhoneNumberHintIntentRequest, używając podanej metody GetPhoneNumberHintIntentRequest.Builder(). Tego obiektu żądania można użyć, aby pobrać instrukcję Intent, która rozpoczyna przepływ numeru telefonu.

Kotlin

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

Java

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

Pytanie o numer telefonu

Wywołanie SignInClient.getPhoneNumberHintIntent() z przekazaniem poprzedniego obiektu GetPhoneNumberHintIntentRequest w celu pobrania PendingIntent w celu zainicjowania przepływu numeru telefonu.

Kotlin

val phoneNumberHintIntentResultLauncher: ActivityResultLauncher = ...

Identity.signInClient(activity)
  .getPhoneNumberHintIntent(request)
  .addOnSuccessListener(
      try {
          phoneNumberHintIntentResultLauncher.launch(request.getIntentSender())
      } 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);
  });

Pobieram numer telefonu

Przekaż Intent w SignInClient.getPhoneNumberFromIntent, aby pobrać numer telefonu.

Kotlin

val phoneNumberHintIntentResultLauncher: ActivityResultLauncher =
  registerForActivityResult(StartActivityForResult()) { result ->
      try {
          val phoneNumber = Identity.signInClient(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);
              }
          }
  });