Firebase PNV kitaplığına yapılan bir çağrı başarısız olduğunda kitaplık bir FirebasePhoneNumberVerificationException bildirir.
Bu sayfada, istisnanın taşıyabileceği her hata kodu, her birinin ne zaman gerçekleştiği ve uygulamanızın bu konuda ne yapması gerektiği listelenir.
Bu sayfada, Firebase PNV entegrasyonunu Android'de Firebase Phone Number Verification kullanmaya başlama bölümünde açıklandığı şekilde yaptığınız varsayılmaktadır.
Hatalar nasıl raporlanır?
Eşzamansız yöntemler (
getVerificationSupportInfo(),getVerifiedPhoneNumber()ve özel akış yöntemleri) birTaskdöndürür. Bu kontroller başarısız olduğundaTask,FirebasePhoneNumberVerificationExceptionile başarısız olur. Bu hata mesajınıaddOnFailureListeneriçinde alırsınız.enableTestSession()eşzamanlıdır. DoğrudanFirebasePhoneNumberVerificationExceptionatar.
Sorunun ne olduğunu öğrenmek için istisnanın errorCode değerini okuyun. Firebase PNV kodları, FirebasePnvStatusCodes sınıfındaki sabitlerdir. Hata Google Play Hizmetleri'nden kaynaklanıyorsa errorCode, NETWORK_ERROR gibi bir CommonStatusCodes değeri de olabilir.
Desteklenmeyen bir cihaz veya SIM, hata olarak kabul edilmez. getVerificationSupportInfo()
başarılı olur ve bu SIM için isSupported() değerini false olarak bildirir. getReason()
bunun nedenini açıklar. Desteklenmeyen cihazlar ve SIM'ler bölümüne bakın.
Hata kodları
Test oturumu oluşturma
Bu hatalar enableTestSession() tarafından eşzamanlı olarak oluşturulur.
| Hata kodu | Neden | Önerilen işlem |
|---|---|---|
TEST_SESSION_ALREADY_ENABLED(55508) |
enableTestSession(), aynı uygulama işleminde birden fazla kez çağrıldı. FirebasePhoneNumberVerification.getInstance()
her seferinde aynı örneği döndürür. Bu nedenle, bu durum, onu çağıran bir Activity yeniden oluşturulduğunda da gerçekleşir. |
enableTestSession() yöntemini işlem başına bir kez çağırın (ör. Application.onCreate() içinde). Kitaplığı test modunda başlatma bölümüne bakın. |
INVALID_TEST_NUMBER_ID(55507) |
enableTestSession() yöntemine iletilen test jetonu boş. |
Derlemenizin, Firebase konsolunda oluşturduğunuz jetonu ilettiğinden ve enableTestSession() yöntemini yalnızca jeton boş olmadığında çağırdığından emin olun. |
Doğrulama
Bu hatalar, getVerifiedPhoneNumber() tarafından döndürülen Task işleminin başarısız olmasına neden olur.
| Hata kodu | Neden | Önerilen işlem |
|---|---|---|
CREDENTIAL_MANAGER_ERROR(55506) |
Android Kimlik Bilgisi Yöneticisi telefon numarasını döndürmedi. İstisnanın cause değeri GetCredentialCancellationException ise kullanıcı büyük olasılıkla kullanıcı rızası ekranını kapatmıştır. |
Telefon numarasını doğrulamak için SMS gibi başka bir yöntem sunun. Kullanıcı, kullanıcı rızası ekranını tekrar göreceği için otomatik olarak yeniden denemeyin. |
CARRIER_NOT_SUPPORTED(55501) |
Seçilen SIM'in operatörü desteklenmiyor veya cihazda, operatörü doğrulamak için gereken abonelik bilgileri yok. | SMS gibi başka bir doğrulama yöntemini kullanın. |
UNSUPPORTED_OPERATION(55505) |
Firebase PNV, cihazda bu istek için kullanılamıyor. | SMS gibi başka bir doğrulama yöntemini kullanın. |
PREFLIGHT_CHECK_FAILED(55504) |
Firebase PNV arka ucu, kullanıcı rızası ekranı gösterilmeden önce doğrulama isteği oluşturamadı. | SMS gibi başka bir doğrulama yöntemini kullanın. Bu durum her istekte yaşanıyorsa uygulamanızın doğru şekilde ayarlandığından emin olun (Üretim moduna yükseltme bölümüne bakın). |
INTEGRITY_CHECK_FAILED(55503) |
Cihaz veya uygulama, bütünlük kontrolünden geçemedi. | SMS gibi başka bir doğrulama yöntemini kullanın. |
INVALID_DIGITAL_CREDENTIAL_RESPONSE(55502) |
Kimlik Bilgisi Yöneticisi'nden gelen yanıt okunamadı veya doğrulanmış bir telefon numarasıyla değiştirilemedi. | SMS gibi başka bir doğrulama yöntemini kullanın. |
INVALID_TEST_NUMBER_ID(55507) |
Test modunda, Firebase PNV arka ucu, süresi dolduğu için test jetonunu reddetti. Test jetonlarının geçerlilik süresi (TTL) 7 gündür. Reddedilen bir test jetonu genellikle bu kodu bildirir. Test modunda başka hatalar görürseniz jetonunuzun güncel olup olmadığını da kontrol edin. | Firebase konsolunda yeni bir test jetonu oluşturun ve uygulamanızı yeniden derleyin. |
ACTIVITY_CONTEXT_REQUIRED(55509) |
getVerifiedPhoneNumber() yöntemine iletilen Context, Activity değil. Yöntemin, kullanıcı rızası ekranını göstermek için bir Activity nesnesine ihtiyacı vardır. |
Mevcut Activity değerini iletin. Bu, uygulamanızdaki bir hatadır, çalışma zamanında ele alınacak bir durum değildir. |
Destek kontrolü
getVerificationSupportInfo() tarafından döndürülen Task, yalnızca kontrolün kendisi çalıştırılamazsa başarısız olur. Bu durumda errorCode, Google Play Hizmetleri CommonStatusCodes değeri veya CARRIER_NOT_SUPPORTED olur. Cihazı desteklenmeyen bir cihaz olarak değerlendirin ve SMS gibi başka bir doğrulama yöntemine geçin.
Test oturumu etkinleştirildiğinde getVerificationSupportInfo(), Firebase PNV arka ucuyla iletişime geçmez ve test jetonunun süresi dolmuş olsa bile test SIM'ini her zaman desteklenen olarak bildirir.
Özel akış
getVerifiedPhoneNumber() yerine özel akışı kullanıyorsanız:
getDigitalCredentialPayload(),PREFLIGHT_CHECK_FAILEDile veya arka uç test jetonunuzu reddederseINVALID_TEST_NUMBER_IDile başarısız olur.exchangeCredentialResponseForPhoneNumber(),INVALID_DIGITAL_CREDENTIAL_RESPONSEile veya arka uç test jetonunuzu reddederseINVALID_TEST_NUMBER_IDile başarısız olur.- Kimlik Bilgisi Yöneticisi'ne yaptığınız çağrı, doğrudan işlediğiniz bir
GetCredentialExceptionhatası döndürür.
Desteklenmeyen cihazlar ve SIM'ler
Bir SIM için isSupported(), false olduğunda getReason() aşağıdaki VerificationSupportStatus değerlerinden birini döndürür:
| Değer | Anlamı |
|---|---|
INCAPABLE_DUE_TO_CARRIER_UNSUPPORTED |
SIM'in operatörü desteklenmiyor. Desteklenen operatörler bölümüne bakın. |
INCAPABLE_DUE_TO_ANDROID_VERSION |
Cihazda Android 9'dan (API düzeyi 28) daha eski bir Android sürümü çalışıyorsa. |
INCAPABLE_DUE_TO_SIM_STATE |
SIM hazır değil. Kilitli veya hâlâ yüklenmekte olan bir SIM de INCAPABLE_DUE_TO_CARRIER_UNSUPPORTED değerini bildirebilir. Bunun nedeni, önce operatörün kontrol edilmesidir. |
Bu durumlarda, söz konusu SIM için SMS gibi başka bir doğrulama yöntemi kullanın.
Örnek
Aşağıdaki örnekte, tipik bir uygulamanın getVerifiedPhoneNumber() yöntemini çağırırken ayırt etmesi gereken hatalar ele alınmaktadır:
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()
}
}
}
Bu örnekte showSmsVerification(), uygulamanızın mevcut telefon numarası doğrulama akışıdır.
Sonraki adımlar
- Her bir sınıf ve sabit hakkında ayrıntılı bilgi için Firebase PNV API referansına bakın.
- Sunucunuzda jetonu doğrulamak için Firebase PNV jetonlarını doğrulama başlıklı makaleyi inceleyin.