רמז למספר טלפון

Phone Number Hint API, ספרייה שמופעלת על ידי Google Play Services, מספקת דרך חלקה להציג את מספרי הטלפון של המשתמש (מבוססי SIM) כרמז.

היתרונות של השימוש ב-Phone Number Hint כוללים:

  • אין צורך בבקשות הרשאה נוספות
  • המשתמש לא צריך להקליד את מספר הטלפון באופן ידני
  • לא צריך חשבון Google
  • לא קשורות ישירות לתהליכי עבודה של כניסה או הרשמה
  • תמיכה רחבה יותר בגרסאות Android בהשוואה למילוי אוטומטי

איך זה עובד

‫Phone Number Hint API משתמש ב-PendingIntent כדי להתחיל את התהליך. אחרי ההפעלה של PendingIntent, למשתמש יוצג ממשק משתמש עם רשימה של כל מספרי הטלפון (מבוססי-SIM). המשתמש יכול לבחור את מספר הטלפון שבו הוא רוצה להשתמש או לבטל את התהליך. מספר הטלפון שנבחר יהיה זמין למפתח לאחזור מ-Intent.

ממשק המשתמש וההגדרות של ההצעות למספרי טלפון.
איור 1. ממשק המשתמש וההגדרות של ההצעות למספרי טלפון

כדי להכין את האפליקציה, מבצעים את השלבים שמפורטים בקטעים הבאים.

הגדרת האפליקציה

מוסיפים את התלות ב-Google Play Services בשביל Phone Number Hint API אל קובץ ה-build של Gradle של המודול, שבדרך כלל נמצא ב-app/build.gradle:

  apply plugin: 'com.android.application'

  ...

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

יוצרים אובייקט GetPhoneNumbeHintIntentRequest

קודם כל, יוצרים אובייקט GetPhoneNumberHintIntentRequest באמצעות ה-method‏ GetPhoneNumberHintIntentRequest.Builder() שסופקה. לאחר מכן, אפשר להשתמש באובייקט הבקשה הזה כדי לקבל Intent ולהתחיל את התהליך של רמז למספר טלפון.

Kotlin

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

Java

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

בקשת רמז למספר טלפון

מפעילים את SignInClient.getPhoneNumberHintIntent(), מעבירים את האובייקט GetPhoneNumberHintIntentRequest הקודם כדי לאחזר את PendingIntent ולהתחיל את התהליך של "רמז למספר טלפון".

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

המערכת מאחזרת את מספר הטלפון

מעבירים את Intent אל SignInClient.getPhoneNumberFromIntent כדי לאחזר את מספר הטלפון.

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