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

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

היתרונות של שימוש בהצעה למספר טלפון כוללים:

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

לפני שמתחילים

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

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

מוסיפים את התלות של 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:21.3.0'
  }

איך זה עובד

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

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

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

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

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

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

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

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

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

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

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