Sugerencia de número de teléfono

La API de Phone Number Hint, una biblioteca con la tecnología de los Servicios de Google Play, proporciona una manera fluida de mostrar los números de teléfono (basados en SIM) de un usuario como sugerencia.

Estos son algunos de los beneficios que ofrece:

  • No se necesitan solicitudes de permiso adicionales.
  • Elimina la necesidad de que el usuario escriba el número de teléfono de forma manual
  • No necesitas una Cuenta de Google
  • No está vinculada directamente a los flujos de trabajo de acceso y registro
  • Mayor compatibilidad con versiones de Android en comparación con Autocompletar

Antes de comenzar

Para preparar tu app, completa los pasos que se indican en las siguientes secciones.

Configurar tu app

En el archivo build.gradle a nivel de proyecto, incluye el repositorio Maven de Google en las secciones buildscript y allprojects:

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

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

Agrega la dependencia de los Servicios de Google Play para la API de Phone Number Hint a tu archivo de compilación de Gradle del módulo, que suele ser app/build.gradle:

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

Cómo funciona

La API de Sugerencia de número de teléfono usa un PendingIntent para iniciar el flujo. Una vez iniciado el PendingIntent, se le presentará al usuario una IU con una lista de todos los números de teléfono (basados en SIM). Luego, el usuario puede seleccionar un número de teléfono que quiera usar o cancelar el flujo. Luego, el número de teléfono seleccionado estará disponible para que el desarrollador lo recupere desde el Intent.

IU y configuración de la sugerencia de números de teléfono
Figura 1: IU y configuración de la sugerencia del número de teléfono

Crea un objeto GetPhoneNumbeHintIntentRequest

Para comenzar, crea un objeto GetPhoneNumberHintIntentRequest con el método GetPhoneNumberHintIntentRequest.Builder() proporcionado. Este objeto de solicitud se puede usar para obtener un elemento Intent a fin de iniciar el flujo de la sugerencia de número de teléfono.

Kotlin

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

Java

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

Solicitud de sugerencia de número de teléfono

Llama a SignInClient.getPhoneNumberHintIntent() pasando el objeto GetPhoneNumberHintIntentRequest anterior a fin de recuperar el PendingIntent para iniciar el flujo de la sugerencia de número de teléfono.

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

Recuperando el número de teléfono

Pasa Intent a SignInClient.getPhoneNumberFromIntent para recuperar el número de teléfono.

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