Firebase PNV लाइब्रेरी को कॉल करने में गड़बड़ी होने पर, लाइब्रेरी FirebasePhoneNumberVerificationException की रिपोर्ट करती है.
इस पेज पर, गड़बड़ी के हर कोड की सूची दी गई है. इसमें यह भी बताया गया है कि गड़बड़ी कब होती है और आपके ऐप्लिकेशन को इसके बारे में क्या करना चाहिए.
इस पेज पर यह माना गया है कि आपने Firebase PNV को इंटिग्रेट कर लिया है. इसके बारे में Android पर Firebase Phone Number Verification का इस्तेमाल शुरू करें में बताया गया है.
गड़बड़ियों की रिपोर्ट कैसे की जाती है
एसिंक्रोनस तरीके (
getVerificationSupportInfo(),getVerifiedPhoneNumber(), और कस्टम फ़्लो के तरीके)Taskदिखाते हैं. इनके काम न करने पर,Taskभी काम नहीं करता. साथ ही, आपकोFirebasePhoneNumberVerificationExceptionमिलता है. यह आपकोaddOnFailureListenerमें मिलता है.enableTestSession()सिंक्रोनस है. यह सीधे तौर परFirebasePhoneNumberVerificationExceptionदिखाता है.
गड़बड़ी के बारे में जानने के लिए, अपवाद का errorCode पढ़ें. Firebase PNV कोड,
FirebasePnvStatusCodes
क्लास में
कॉन्सटेंट होते हैं. अगर गड़बड़ी Google Play services की वजह से हुई है, तो 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() को सिर्फ़ तब कॉल करें, जब टोकन खाली न हो. |
पुष्टि
इन गड़बड़ियों की वजह से, getVerifiedPhoneNumber() से मिले Task काम नहीं करते.
| गड़बड़ी का कोड | वजह | सुझाई गई कार्रवाई |
|---|---|---|
CREDENTIAL_MANAGER_ERROR(55506) |
Android Credential Manager ने फ़ोन नंबर नहीं दिया. अगर
अपवाद का 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) |
Credential Manager से मिले जवाब को पढ़ा नहीं जा सका या उसकी जगह, पुष्टि किया गया फ़ोन नंबर नहीं दिया जा सका. | पुष्टि करने के लिए कोई दूसरा तरीका इस्तेमाल करें, जैसे कि एसएमएस. |
INVALID_TEST_NUMBER_ID(55507) |
टेस्ट मोड में, Firebase PNV बैकएंड ने टेस्ट टोकन को अस्वीकार कर दिया. उदाहरण के लिए, इसकी समयसीमा खत्म हो गई है. टेस्ट टोकन का टीटीएल सात दिन का होता है. आम तौर पर, अस्वीकार किया गया टेस्ट टोकन इस कोड की रिपोर्ट करता है. अगर आपको टेस्ट मोड में अन्य गड़बड़ियां दिखती हैं, तो यह भी देखें कि आपका टोकन मौजूदा है या नहीं. | Firebase कंसोल में नया टेस्ट टोकन जनरेट करें और अपने ऐप्लिकेशन को फिर से बनाएं. |
ACTIVITY_CONTEXT_REQUIRED(55509) |
getVerifiedPhoneNumber() को पास किया गया Context, Activity नहीं है. सहमति वाली स्क्रीन दिखाने के लिए, इस तरीके में Activity की ज़रूरत होती है. |
मौजूदा Activity को पास करें. यह आपके ऐप्लिकेशन में मौजूद एक गड़बड़ी है, न कि रनटाइम के दौरान मैनेज की जाने वाली कोई शर्त. |
यह देखना कि डिवाइस पर Google Play की सेवाएं काम करती हैं या नहीं
getVerificationSupportInfo() से मिला Task सिर्फ़ तब काम नहीं करता, जब जांच खुद नहीं चल पाती. ऐसे में, errorCode या तो Google Play services की 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 |
सिम के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी की सुविधा उपलब्ध नहीं है. मोबाइल और इंटरनेट सेवा देने वाली ऐसी कंपनियां जो Google से मैसेज पाने की सुविधा देती हैं देखें. |
INCAPABLE_DUE_TO_ANDROID_VERSION |
डिवाइस में Android 9 (एपीआई लेवल 28) से पुराना Android वर्शन चल रहा हो. |
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 टोकन की पुष्टि करें देखें.