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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

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

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

قبل البدء

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

إعداد تطبيقك

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

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

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

يمكنك إضافة العناصر التابعة لـ خدمات Google Play إلى واجهة برمجة التطبيقات لرقم الهاتف، إلى ملف إصدار Gradle's الذي يُعرف عادةً باسم "الوحدة"، الذي يكون عادةً app/build.gradle:

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