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

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

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

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

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

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

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

בקובץ build.gradle ברמת הפרויקט, יש לכלול את המאגר של Maven במאגר גם בקטע buildscript וגם בקטע allprojects:

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

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

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

  dependencies {
    implementation 'com.google.android.gms:play-services-auth:20.2.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: 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);
  });

בתהליך אחזור של מספר הטלפון

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

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