Wskazówka dotycząca numeru telefonu

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Phone Number Hint API, czyli biblioteka oparta na Usługach Google Play, umożliwia bezproblemowy sposób wyświetlania numerów telefonów użytkowników (za pomocą kart SIM).

Zalety korzystania z podpowiedzi dotyczących numeru telefonu:

  • Nie potrzeba żadnych dodatkowych uprawnień
  • Użytkownik nie musi ręcznie wpisywać numeru telefonu.
  • Konto Google nie jest potrzebne
  • Bezpośrednie powiązanie z procesem logowania lub logowania się
  • Większa obsługa wersji Androida w porównaniu z autouzupełnianiem

Zanim zaczniesz

Aby przygotować aplikację, wykonaj czynności opisane w kolejnych sekcjach.

Konfigurowanie aplikacji

W pliku build.gradle na poziomie projektu uwzględnij repozytorium Maven i Google w sekcjach buildscript i allprojects:

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

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

Dodaj zależność z usługami Google Play dla interfejsu Phone Number Hint API w pliku kompilacji Gradle, który zwykle jest app/build.gradle:

  dependencies {
    implementation 'com.google.android.gms:play-services-auth:20.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 karcie SIM). Użytkownik może wtedy wybrać numer telefonu, którego chce użyć, lub anulować proces. Wybrany numer telefonu zostanie udostępniony deweloperowi, by mógł pobrać dane z Intent.

UI oraz ustawienia i podpowiedzi dotyczące numeru telefonu.
Rysunek 1. UI i ustawienia numeru telefonu

Tworzenie obiektu GetPhoneNumbeHintIntentRequest

Zacznij od utworzenia obiektu GetPhoneNumberHintIntentRequest przy użyciu podanej metody GetPhoneNumberHintIntentRequest.Builder(). Tego obiektu żądania można użyć do pobrania Intent na potrzeby uruchomienia podpowiedzi dotyczącej numeru telefonu.

Kotlin

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

Java

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

Pytanie o numer telefonu

Wywołaj SignInClient.getPhoneNumberHintIntent() z użyciem poprzedniego obiektu GetPhoneNumberHintIntentRequest, aby pobrać metodę 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);
  });

Odzyskiwanie numeru telefonu

Aby odebrać numer telefonu, przekaż polecenie Intent do SignInClient.getPhoneNumberFromIntent.

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