تلميح رقم الهاتف

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

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

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

قبل البدء

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

إعداد تطبيقك

في ملف build.gradle على مستوى المشروع، أدرِج مستودع Google Maven في كل من قسمَي buildscript وallprojects:

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

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

أضِف خدمات Google Play المرتبطة بواجهة برمجة التطبيقات Number Number Hint API إلى module's Gradle Build file، والتي عادةً ما تكون app/build.gradle:

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

آلية العمل

تستخدم واجهة برمجة التطبيقات لتلميح رقم الهاتف 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);
              }
          }
  });