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

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

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

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

איך זה עובד

ה-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:21.4.0'
  }

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

קודם כל יוצרים אובייקט GetPhoneNumberHintIntentRequest באמצעות השיטה 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);
              }
          }
  });