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

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

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

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

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

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

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

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

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

  apply plugin: 'com.android.application'

  ...

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

איך זה עובד

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

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

יצירת אובייקט 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);
              }
          }
  });