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

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

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

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

روش کار

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

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

برای آماده‌سازی برنامه‌تان، مراحل بخش‌های زیر را تکمیل کنید.

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

وابستگی خدمات 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 برای شروع جریان «پیشنهاد شماره تلفن» استفاده کرد.

کاتلین

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

جاوا

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

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

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

کاتلین

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<Intent> 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<Intent> phoneNumberHintIntentResultLauncher =
    registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                try {
                    String phoneNumber = Identity.getSignInClient(activity).getPhoneNumberFromIntent(result.getData());
                } catch {
                    Log.e(TAG, "Phone Number Hint failed", e);
                }
            }
    });