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

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

تشمل مزايا استخدام ميزة "تلميح رقم الهاتف" ما يلي:

  • لا حاجة إلى طلب أذونات إضافية
  • عدم الحاجة إلى أن يكتب المستخدم رقم الهاتف يدويًا
  • ليس من الضروري أن يكون لديك حساب على 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: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);
              }
          }
  });