راهنمایی شماره تلفن

Phone Number Hint API، کتابخانه‌ای که توسط سرویس‌های Google Play پشتیبانی می‌شود، روشی بدون اصطکاک برای نمایش شماره‌های تلفن کاربر (مبتنی بر سیم‌کارت) به‌عنوان یک راهنمایی ارائه می‌کند.

مزایای استفاده از شماره تلفن شامل موارد زیر است:

  • هیچ درخواست مجوز اضافی مورد نیاز نیست
  • کاربر را از تایپ دستی شماره تلفن بی نیاز می کند
  • هیچ حساب Google مورد نیاز نیست
  • مستقیماً به گردش‌های کاری ثبت نام/آپ نمی‌شود
  • پشتیبانی گسترده تر از نسخه های اندروید در مقایسه با تکمیل خودکار

قبل از شروع

برای آماده سازی اپلیکیشن خود، مراحل زیر را انجام دهید.

برنامه خود را پیکربندی کنید

وابستگی خدمات 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.2.0'
  }

چگونه کار می کند

Phone Number Hint API از PendingIntent برای شروع جریان استفاده می کند. هنگامی که PendingIntent راه اندازی شد، یک رابط کاربری به کاربر ارائه می شود که همه شماره های تلفن (مبتنی بر سیم کارت) را فهرست می کند. سپس کاربر می تواند شماره تلفنی را که می خواهد استفاده کند انتخاب کند یا جریان را لغو کند. سپس شماره تلفن انتخاب شده برای بازیابی از Intent در اختیار برنامه‌نویس قرار می‌گیرد.

شماره تلفن اشاره رابط کاربری و تنظیمات.
شکل 1. شماره تلفن راهنمایی و تنظیمات

یک شی GetPhoneNumbeHintIntentRequest ایجاد کنید

با ایجاد یک شی GetPhoneNumberHintIntentRequest با استفاده از متد GetPhoneNumberHintIntentRequest.Builder() شروع کنید. سپس می توان از این شی درخواست برای دریافت Intent برای شروع جریان شماره تلفن استفاده کرد.

کاتلین

val request: GetPhoneNumberHintIntentRequest = GetPhoneNumberHintIntentRequest.builder().build()

جاوا

GetPhoneNumberHintIntentRequest request = GetPhoneNumberHintIntentRequest.builder().build();

راهنمایی درخواست شماره تلفن

SignInClient.getPhoneNumberHintIntent() را فراخوانی کنید، که در شیء GetPhoneNumberHintIntentRequest قبلی ارسال می شود، تا PendingIntent برای شروع جریان Hint شماره تلفن بازیابی کنید.

کاتلین

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

جاوا

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 منتقل کنید.

کاتلین

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

جاوا

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