Firebase PNV লাইব্রেরিতে কল করা না গেলে, লাইব্রেরি একটি
FirebasePhoneNumberVerificationException রিপোর্ট করে।
এই পৃষ্ঠায় ব্যতিক্রমের সাথে আসতে পারে এমন প্রতিটি ত্রুটি কোড, কখন প্রতিটি ত্রুটি
ঘটে এবং আপনার অ্যাপের কী করা উচিত তা তালিকাভুক্ত করা হয়েছে।
এই পৃষ্ঠায় ধরে নেওয়া হয়েছে যে আপনি Firebase PNV ইন্টিগ্রেট করেছেন, যেমনটি Android-এ Firebase Phone Number Verification ব্যবহার শুরু করুন-এ বর্ণনা করা হয়েছে।
কীভাবে সমস্যার ব্যাপারে অভিযোগ জানানো হয়
অ্যাসিঙ্ক্রোনাস পদ্ধতি (
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(৫৫৫০৮) |
একই অ্যাপ প্রসেসে enableTestSession() একাধিকবার কল করা হয়েছে। FirebasePhoneNumberVerification.getInstance()
প্রতিবার একই ইনস্ট্যান্স রিটার্ন করে, তাই এটিও ঘটে যখন একটি
Activity যা এটিকে কল করে তা আবার তৈরি করা হয়। |
প্রতিটি প্রসেসে একবার enableTestSession() কল করুন, যেমন
Application.onCreate()-এ। টেস্ট মোডে লাইব্রেরি ইনিশিয়ালাইজ করুন
দেখুন। |
INVALID_TEST_NUMBER_ID(55507) |
enableTestSession()-এ পাস করা টেস্ট টোকেন
খালি। |
আপনার বিল্ড যাতে Firebase কনসোলে আপনার জেনারেট করা টোকেন পাস করে তা নিশ্চিত করুন এবং
টোকেন খালি না থাকলে তবেই enableTestSession() কল করুন। |
যাচাইকরণ
এইসব সমস্যার কারণে getVerifiedPhoneNumber()-এর পাঠানো Task কাজ করে না।
| সমস্যার কোড | কারণ | প্রস্তাবিত পদক্ষেপ |
|---|---|---|
CREDENTIAL_MANAGER_ERROR(55506) |
Android ক্রেডেনশিয়াল ম্যানেজার ফোন নম্বর ফিরিয়ে দেয়নি। যদি
ব্যতিক্রমের cause একটি
GetCredentialCancellationException হয়, তাহলে ব্যবহারকারী সম্ভবত
সম্মতি সংক্রান্ত স্ক্রিন বাতিল করেছেন। |
ফোন নম্বর যাচাই করার জন্য অন্য কোনও উপায় অফার করুন, যেমন এসএমএস। অটোমেটিক আবার চেষ্টা করবেন না, কারণ ব্যবহারকারী আবার সম্মতি সংক্রান্ত স্ক্রিন দেখতে পাবেন। |
CARRIER_NOT_SUPPORTED(55501) |
বেছে নেওয়া সিমের পরিষেবা প্রদানকারী কাজ করছে না অথবা ডিভাইসটি যাচাই করার জন্য প্রয়োজনীয় সাবস্ক্রিপশন সংক্রান্ত তথ্য ডিভাইসে নেই। | এসএমএসের মতো অন্য কোনও যাচাইকরণ পদ্ধতি ব্যবহার করুন। |
UNSUPPORTED_OPERATION(৫৫৫০৫) |
ডিভাইসে এই অনুরোধের জন্য Firebase PNV উপলভ্য নেই। | এসএমএসের মতো অন্য কোনও যাচাইকরণ পদ্ধতি ব্যবহার করুন। |
PREFLIGHT_CHECK_FAILED(55504) |
সম্মতি সংক্রান্ত স্ক্রিন দেখানোর আগে, Firebase PNV ব্যাকএন্ড যাচাইকরণের অনুরোধ তৈরি করতে পারেনি। | এসএমএসের মতো অন্য কোনও যাচাইকরণ পদ্ধতি ব্যবহার করুন। প্রতিটি অনুরোধের ক্ষেত্রে এটি হলে, আপনার অ্যাপ সঠিকভাবে সেট-আপ করা হয়েছে কিনা তা চেক করুন (প্রোডাকশন মোডে আপগ্রেড করুন দেখুন)। |
INTEGRITY_CHECK_FAILED(৫৫৫০৩) |
ডিভাইস বা অ্যাপ ইন্টিগ্রিটি চেক করতে পারেনি। | এসএমএসের মতো অন্য কোনও যাচাইকরণ পদ্ধতি ব্যবহার করুন। |
INVALID_DIGITAL_CREDENTIAL_RESPONSE(55502) |
ক্রেডেনশিয়াল ম্যানেজার থেকে পাওয়া উত্তর পড়া যায়নি অথবা যাচাই করা ফোন নম্বরের সাথে বিনিময় করা যায়নি। | এসএমএসের মতো অন্য কোনও যাচাইকরণ পদ্ধতি ব্যবহার করুন। |
INVALID_TEST_NUMBER_ID(55507) |
টেস্ট মোডে, Firebase PNV ব্যাকএন্ড টেস্ট টোকেন বাতিল করেছে, যেমন কারণ এটির মেয়াদ শেষ হয়ে গেছে। টেস্ট টোকেনের ৭ দিনের TTL আছে। বাতিল করা টেস্ট টোকেন সাধারণত এই কোড রিপোর্ট করে; টেস্ট মোডে অন্য কোনও সমস্যা দেখতে পেলে, আপনার টোকেন বর্তমান কিনা তাও চেক করুন। | Firebase কনসোলে নতুন টেস্ট টোকেন জেনারেট করুন এবং আপনার অ্যাপ আবার তৈরি করুন। |
ACTIVITY_CONTEXT_REQUIRED(55509) |
getVerifiedPhoneNumber()-এ পাস করা Context
Activity নয়। সম্মতি স্ক্রিন দেখানোর জন্য
পদ্ধতিটির একটি Activity প্রয়োজন। |
বর্তমান Activity পাস করুন। এটি আপনার অ্যাপের একটি সমস্যা, রানটাইমে
ম্যানেজ করার মতো কোনও পরিস্থিতি নয়। |
সহায়তা চেক
getVerificationSupportInfo()-এর মাধ্যমে ফেরত পাঠানো Task তখনই ব্যর্থ হয় যখন চেক
নিজেই রান করতে পারে না। সেক্ষেত্রে, 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 9 (API লেভেল ২৮)-এর চেয়ে পুরনো 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 API রেফারেন্স দেখুন।
- আপনার সার্ভারে টোকেন যাচাই করতে, Firebase PNV টোকেন যাচাই করুন দেখুন।