وقتی تماس با کتابخانه Firebase PNV ناموفق باشد، کتابخانه
FirebasePhoneNumberVerificationException را گزارش میکند.
این صفحه همه کدهای خطایی را که استثنا میتواند داشته باشد، زمان وقوع هرکدام، و کاری را که برنامه شما باید درقبال آن انجام دهد فهرست میکند.
این صفحه فرض میکند که شما Firebase PNV را همانطور که در شروع به کار با Firebase Phone Number Verification در Android شرح داده شده است ادغام کردهاید.
نحوه گزارش شدن خطاها
روشهای ناهمگام (
getVerificationSupportInfo()،getVerifiedPhoneNumber()، و روشهای جریان سفارشی)Taskرا برمیگردانند. وقتی این بررسیها ناموفق باشد،TaskباFirebasePhoneNumberVerificationExceptionناموفق میشود که آن را درaddOnFailureListenerدریافت میکنید.enableTestSession()همگام است. مستقیماًFirebasePhoneNumberVerificationExceptionپرتاب میکند.
برای اینکه متوجه شوید مشکل چیست، errorCode استثنا را بخوانید. کدهای Firebase PNV
ثابتهایی در کلاس
FirebasePnvStatusCodes
هستند. اگر خطا از «خدمات Google Play» باشد، errorCode میتواند مقدار
CommonStatusCodes
نیز باشد، مثل NETWORK_ERROR.
دستگاه یا سیمکارت پشتیبانینشده خطا محسوب نمیشود. getVerificationSupportInfo()
موفق میشود و isSupported() را بهعنوان false برای آن سیمکارت گزارش میکند، و getReason()
دلیل آن را به شما میگوید. دستگاهها و سیمکارتهای پشتیبانینشده را ببینید.
کدهای خطا
راهاندازی جلسه آزمایشی
این خطاها بهصورت همزمان توسط enableTestSession() ایجاد میشوند.
| کد خطا | آرمان | اقدام توصیهشده |
|---|---|---|
TEST_SESSION_ALREADY_ENABLED(55508) |
enableTestSession() بیشاز یکبار در یک فرایند برنامه فراخوانده شده است. FirebasePhoneNumberVerification.getInstance()
هربار همان نمونه را برمیگرداند، بنابراین این اتفاق زمانی هم میافتد که
Activity که آن را فراخوانی میکند دوباره ایجاد شود. |
enableTestSession() را یکبار در هر فرایند فراخوانی کنید، برای مثال در
Application.onCreate(). راهاندازی کتابخانه در حالت آزمایشی را ببینید. |
INVALID_TEST_NUMBER_ID(55507) |
کد آزمایشی ارسالشده به enableTestSession() خالی است. |
مطمئن شوید ساخت شما توکنی را که در کنسول Firebase تولید کردهاید ارسال میکند و فقط زمانی enableTestSession() را فراخوانی کنید که توکن خالی نباشد. |
درستیسنجی
این خطاها باعث رد شدن Task برگرداندهشده توسط getVerifiedPhoneNumber() میشود.
| کد خطا | آرمان | اقدام توصیهشده |
|---|---|---|
CREDENTIAL_MANAGER_ERROR(55506) |
«مدیر اطلاعات کاربری Android» شماره تلفن را برنگرداند. اگر
cause استثنا
GetCredentialCancellationException باشد، احتمالاً کاربر
صفحه کسب رضایت را بسته است. |
روش دیگری برای بهتأیید رساندن شماره تلفن ارائه دهید، مثلاً پیامک. بهطور خودکار دوباره امتحان نکنید، زیرا کاربر دوباره صفحه رضایت را خواهد دید. |
CARRIER_NOT_SUPPORTED(55501) |
شرکت مخابراتی سیمکارت انتخابشده پشتیبانی نمیشود، یا دستگاه اطلاعات اشتراک لازم برای درستیسنجی آن را ندارد. | به روش درستیسنجی دیگری، مثل پیامک، برگردید. |
UNSUPPORTED_OPERATION(55505) |
Firebase PNV برای این درخواست در دستگاه دردسترس نیست. | به روش درستیسنجی دیگری، مثل پیامک، برگردید. |
PREFLIGHT_CHECK_FAILED(55504) |
بخش پشتیبان Firebase PNV نتوانست درخواست درستیسنجی را قبلاز نمایش صفحه رضایت ایجاد کند. | به روش درستیسنجی دیگری، مثل پیامک، برگردید. اگر این اتفاق برای همه درخواستها میافتد، بررسی کنید که برنامهتان بهدرستی راهاندازی شده باشد (به ارتقا به حالت تولید مراجعه کنید). |
INTEGRITY_CHECK_FAILED(55503) |
دستگاه یا برنامه در بررسی تمامیت رد شد. | به روش درستیسنجی دیگری، مثل پیامک، برگردید. |
INVALID_DIGITAL_CREDENTIAL_RESPONSE(55502) |
پاسخ «مدیر اطلاعات کاربری» خوانده نشد یا با شماره تلفن درستیسنجیشده مبادله نشد. | به روش درستیسنجی دیگری، مثل پیامک، برگردید. |
INVALID_TEST_NUMBER_ID(55507) |
در حالت آزمایشی، باطن Firebase PNV کد آزمایشی را رد کرد، برای مثال چون منقضی شده بود. ژتونهای آزمایشی ۷ روز TTL دارند. یک کد تأیید آزمایشی ردشده معمولاً این کد را گزارش میکند؛ اگر خطاهای دیگری در حالت آزمایشی مشاهده کردید، همچنین بررسی کنید که کد تأیید شما بهروز باشد. | در کنسول Firebase، یک کد آزمایشی جدید ایجاد کنید و برنامهتان را دوباره بسازید. |
ACTIVITY_CONTEXT_REQUIRED(55509) |
Context ارسالشده به getVerifiedPhoneNumber()
Activity نیست. این روش برای نشان دادن صفحه رضایت به Activity نیاز دارد. |
Activity فعلی را رد کنید. این یک اشکال در برنامه شما است، نه
شرایطی که باید در زمان اجرا مدیریت شود. |
بررسی پشتیبانی
Task برگرداندهشده توسط getVerificationSupportInfo() فقط درصورتی ناموفق است که خود بررسی نتواند اجرا شود. در این حالت، errorCode یا مقدار «خدمات Google Play» است
CommonStatusCodes یا CARRIER_NOT_SUPPORTED. دستگاه را بهعنوان دستگاه پشتیبانینشده درنظر بگیرید و به روش درستیسنجی دیگری، مثل پیامک، برگردید.
وقتی جلسه آزمایشی فعال است، getVerificationSupportInfo() با
بخش پشتی Firebase PNV تماس نمیگیرد و همیشه سیمکارت آزمایشی را بهعنوان پشتیبانیشده گزارش میکند، حتی اگر
ژتون آزمایشی منقضی شده باشد.
جریان سفارشی
اگر بهجای getVerifiedPhoneNumber() از جریان سفارشی استفاده میکنید:
getDigitalCredentialPayload()باPREFLIGHT_CHECK_FAILEDناموفق میشود، یا باINVALID_TEST_NUMBER_IDاگر باطن کد آزمایشی شما را رد کند.exchangeCredentialResponseForPhoneNumber()باINVALID_DIGITAL_CREDENTIAL_RESPONSEیا باINVALID_TEST_NUMBER_IDناموفق میشود اگر بخش باطنی کد آزمایشی شما را رد کند.- فراخوانی شما به Credential Manager یک
GetCredentialExceptionرا برمیگرداند که شما مستقیماً آن را مدیریت میکنید.
دستگاهها و سیمکارتهای پشتیبانینشده
وقتی isSupported() برای سیمکارت false باشد، getReason() یکی از مقادیر
زیر
VerificationSupportStatus
را برمیگرداند:
| مقدار | معنی |
|---|---|
INCAPABLE_DUE_TO_CARRIER_UNSUPPORTED |
شرکت مخابراتی سیمکارت پشتیبانی نمیشود. شرکتهای مخابراتی پشتیبانیشده را ببینید. |
INCAPABLE_DUE_TO_ANDROID_VERSION |
دستگاه از نسخهای از Android قدیمیتر از Android 9 (سطح میانای برنامهسازی کاربردی ۲۸) استفاده میکند. |
INCAPABLE_DUE_TO_SIM_STATE |
سیمکارت آماده نیست. سیمکارتی که قفل است یا هنوز درحال بار شدن است نیز میتواند INCAPABLE_DUE_TO_CARRIER_UNSUPPORTED را گزارش کند، زیرا ابتدا اپراتور بررسی میشود. |
در هر مورد، از روش درستیسنجی دیگری، مثل پیامک، برای آن سیمکارت استفاده کنید.
مثال
مثال زیر خطاهایی را که یک برنامه معمولی باید هنگام فراخوانی getVerifiedPhoneNumber() تشخیص دهد، مدیریت میکند:
Kotlin
import android.util.Log
// Credential Manager is included with the Firebase PNV library.
import androidx.credentials.exceptions.GetCredentialCancellationException
import com.google.firebase.pnv.FirebasePhoneNumberVerification
import com.google.firebase.pnv.FirebasePhoneNumberVerificationException
import com.google.firebase.pnv.FirebasePnvStatusCodes
private const val TAG = "PhoneVerification"
// In your Activity:
private fun verifyPhoneNumber() {
FirebasePhoneNumberVerification.getInstance()
.getVerifiedPhoneNumber(this)
.addOnSuccessListener { result ->
// Send result.getToken() to your backend.
}
.addOnFailureListener { e -> handleFpnvError(e) }
}
private fun handleFpnvError(e: Exception) {
if (e !is FirebasePhoneNumberVerificationException) {
Log.w(TAG, "Firebase PNV failed", e)
showSmsVerification()
return
}
when (e.errorCode) {
FirebasePnvStatusCodes.CREDENTIAL_MANAGER_ERROR -> {
if (e.cause is GetCredentialCancellationException) {
// The user dismissed the consent screen.
}
showSmsVerification()
}
FirebasePnvStatusCodes.INVALID_TEST_NUMBER_ID -> {
// Test mode only: generate a new test token.
Log.e(TAG, "Firebase PNV test token rejected", e)
}
FirebasePnvStatusCodes.ACTIVITY_CONTEXT_REQUIRED -> {
// App bug: pass an Activity to getVerifiedPhoneNumber().
Log.e(TAG, "Firebase PNV needs an Activity context", e)
}
else -> {
// Carrier not supported, network errors, and other failures.
Log.w(TAG, "Firebase PNV failed with error code ${e.errorCode}", e)
showSmsVerification()
}
}
}
در این مثال، showSmsVerification() جریان درستیسنجی شماره تلفن موجود در برنامهتان است.
مراحل بعدی
- برای جزئیات مربوط به هر کلاس و ثابت، Firebase PNV مرجع میانای برنامهسازی کاربردی را ببینید.
- برای درستیسنجی کردن کد در سرور، به درستیسنجی کردن کدهای Firebase PNV مراجعه کنید.