تلميح بشأن رقم الهاتف

توفّر واجهة برمجة التطبيقات Phone Number Hint API، وهي مكتبة مستندة إلى خدمات Google Play، طريقة سلسة لعرض أرقام هواتف المستخدم (المستندة إلى شريحة SIM) كتلميح.

تشمل مزايا استخدام واجهة برمجة التطبيقات Phone Number Hint ما يلي:

  • لا حاجة إلى طلبات إضافية للحصول على إذن
  • يغني المستخدم عن كتابة رقم الهاتف يدويًا
  • لا حاجة إلى حساب Google
  • غير مرتبطة مباشرةً بمهام سير العمل الخاصة بتسجيل الدخول أو الاشتراك
  • دعم أوسع لإصدارات Android مقارنةً بميزة "الملء التلقائي"

آلية العمل

تستخدم واجهة برمجة التطبيقات Phone Number Hint API رمز PendingIntent لبدء العملية. بعد تشغيل PendingIntent، ستظهر للمستخدم واجهة مستخدم تعرض جميع أرقام الهواتف (المستندة إلى شريحة SIM). ويمكن للمستخدم بعد ذلك اختيار رقم هاتف يريد استخدامه أو إلغاء العملية. سيصبح رقم الهاتف المحدّد متاحًا للمطوّر لاسترداده من Intent.

واجهة المستخدم والإعدادات الخاصة بميزة "تلميح رقم الهاتف"
الشكل 1. واجهة مستخدم تلميح رقم الهاتف والإعدادات

لإعداد تطبيقك، أكمِل الخطوات الواردة في الأقسام التالية.

إعداد تطبيقك

أضِف اعتماديات خدمات Google Play لواجهة Phone Number Hint API إلى ملف Gradle الخاص بالوحدة، والذي يكون عادةً app/build.gradle:

  apply plugin: 'com.android.application'

  ...

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