Jika panggilan ke library Firebase PNV gagal, library akan melaporkan
FirebasePhoneNumberVerificationException.
Halaman ini mencantumkan setiap kode error yang dapat dibawa oleh pengecualian, kapan setiap kode error
terjadi, dan apa yang harus dilakukan aplikasi Anda terkait hal tersebut.
Halaman ini mengasumsikan bahwa Anda telah mengintegrasikan Firebase PNV seperti yang dijelaskan dalam Memulai Firebase Phone Number Verification di Android.
Cara error dilaporkan
Metode asinkron (
getVerificationSupportInfo(),getVerifiedPhoneNumber(), dan metode alur kustom) menampilkanTask. Jika gagal,Taskakan gagal denganFirebasePhoneNumberVerificationException, yang Anda terima diaddOnFailureListener.enableTestSession()bersifat sinkron. PengecualianFirebasePhoneNumberVerificationExceptionakan langsung ditampilkan.
Baca errorCode pengecualian untuk mengetahui penyebab masalahnya. Kode Firebase PNV
adalah konstanta dalam
class
FirebasePnvStatusCodes. Jika kegagalan berasal dari layanan Google Play, errorCode juga dapat berupa nilai
CommonStatusCodes,
seperti NETWORK_ERROR.
Perangkat atau SIM yang tidak didukung bukanlah error. getVerificationSupportInfo()
berhasil dan melaporkan isSupported() sebagai false untuk SIM tersebut, dan getReason()
memberi tahu Anda alasannya. Lihat Perangkat dan SIM yang tidak didukung.
Kode error
Penyiapan sesi pengujian
Error ini ditampilkan secara sinkron oleh enableTestSession().
| Kode error | Penyebab | Tindakan yang disarankan |
|---|---|---|
TEST_SESSION_ALREADY_ENABLED(55508) |
enableTestSession() dipanggil lebih dari sekali dalam proses aplikasi yang sama. FirebasePhoneNumberVerification.getInstance()
menampilkan instance yang sama setiap kali, sehingga hal ini juga terjadi saat
Activity yang memanggilnya dibuat ulang. |
Panggil enableTestSession() sekali per proses, misalnya di
Application.onCreate(). Lihat
Melakukan inisialisasi library dalam mode
pengujian. |
INVALID_TEST_NUMBER_ID(55507) |
Token pengujian yang diteruskan ke enableTestSession() kosong. |
Pastikan build Anda meneruskan token yang Anda buat di
Firebase console, dan hanya panggil enableTestSession() jika
token tidak kosong. |
Verifikasi
Error ini menggagalkan Task yang ditampilkan oleh getVerifiedPhoneNumber().
| Kode error | Penyebab | Tindakan yang disarankan |
|---|---|---|
CREDENTIAL_MANAGER_ERROR(55506) |
Credential Manager Android tidak menampilkan nomor telepon. Jika cause pengecualian adalah GetCredentialCancellationException, kemungkinan besar pengguna menutup layar izin. |
Tawarkan cara lain untuk memverifikasi nomor telepon, seperti SMS. Jangan mencoba lagi secara otomatis, karena pengguna akan melihat layar izin lagi. |
CARRIER_NOT_SUPPORTED(55501) |
Operator SIM yang dipilih tidak didukung, atau perangkat tidak memiliki informasi langganan yang diperlukan untuk memverifikasinya. | Gunakan metode verifikasi lain, seperti SMS. |
UNSUPPORTED_OPERATION(55505) |
Firebase PNV tidak tersedia untuk permintaan ini di perangkat. | Gunakan metode verifikasi lain, seperti SMS. |
PREFLIGHT_CHECK_FAILED(55504) |
Backend Firebase PNV tidak dapat membuat permintaan verifikasi, sebelum layar izin ditampilkan. | Gunakan metode verifikasi lain, seperti SMS. Jika hal ini terjadi untuk setiap permintaan, pastikan aplikasi Anda disiapkan dengan benar (lihat Mengupgrade ke mode produksi). |
INTEGRITY_CHECK_FAILED(55503) |
Perangkat atau aplikasi gagal dalam pemeriksaan integritas. | Gunakan metode verifikasi lain, seperti SMS. |
INVALID_DIGITAL_CREDENTIAL_RESPONSE(55502) |
Respons dari Credential Manager tidak dapat dibaca, atau tidak dapat ditukar dengan nomor telepon terverifikasi. | Gunakan metode verifikasi lain, seperti SMS. |
INVALID_TEST_NUMBER_ID(55507) |
Dalam mode pengujian, backend Firebase PNV menolak token pengujian, misalnya karena masa berlakunya telah habis. Token pengujian memiliki TTL 7 hari. Token pengujian yang ditolak biasanya melaporkan kode ini; jika Anda melihat error lain dalam mode pengujian, periksa juga apakah token Anda sudah yang terbaru. | Buat token pengujian baru di Firebase console dan build ulang aplikasi Anda. |
ACTIVITY_CONTEXT_REQUIRED(55509) |
Context yang diteruskan ke getVerifiedPhoneNumber()
bukanlah Activity. Metode ini memerlukan Activity untuk
menampilkan layar izin. |
Teruskan Activity saat ini. Ini adalah bug di aplikasi Anda, bukan
kondisi yang harus ditangani saat runtime. |
Pemeriksaan dukungan
Task yang ditampilkan oleh getVerificationSupportInfo() hanya gagal jika pemeriksaan itu sendiri tidak dapat dijalankan. Dalam hal ini, errorCode adalah nilai CommonStatusCodes layanan Google Play atau CARRIER_NOT_SUPPORTED. Perlakukan perangkat sebagai
tidak didukung dan beralih ke metode verifikasi lain, seperti SMS.
Saat sesi pengujian diaktifkan, getVerificationSupportInfo() tidak akan menghubungi
backend Firebase PNV dan selalu melaporkan SIM pengujian sebagai didukung, meskipun
token pengujian telah habis masa berlakunya.
Alur kustom
Jika Anda menggunakan alur kustom, bukan
getVerifiedPhoneNumber():
getDigitalCredentialPayload()gagal denganPREFLIGHT_CHECK_FAILED, atau denganINVALID_TEST_NUMBER_IDjika backend menolak token pengujian Anda.exchangeCredentialResponseForPhoneNumber()gagal denganINVALID_DIGITAL_CREDENTIAL_RESPONSE, atau denganINVALID_TEST_NUMBER_IDjika backend menolak token pengujian Anda.- Panggilan Anda sendiri ke Credential Manager menampilkan
GetCredentialException, yang Anda tangani secara langsung.
Perangkat dan SIM yang tidak didukung
Jika isSupported() adalah false untuk SIM, getReason() akan menampilkan salah satu nilai
VerificationSupportStatus
berikut:
| Nilai | Arti |
|---|---|
INCAPABLE_DUE_TO_CARRIER_UNSUPPORTED |
Operator SIM tidak didukung. Lihat Operator yang didukung. |
INCAPABLE_DUE_TO_ANDROID_VERSION |
Perangkat menjalankan versi Android yang lebih lama dari Android 9 (level API 28). |
INCAPABLE_DUE_TO_SIM_STATE |
SIM belum siap. SIM yang terkunci atau masih dimuat juga dapat melaporkan INCAPABLE_DUE_TO_CARRIER_UNSUPPORTED, karena operator diperiksa terlebih dahulu. |
Dalam setiap kasus, gunakan metode verifikasi lain, seperti SMS, untuk SIM tersebut.
Contoh
Contoh berikut menangani error yang perlu dibedakan oleh aplikasi standar saat memanggil 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()
}
}
}
Dalam contoh ini, showSmsVerification() adalah alur verifikasi nomor telepon yang ada di aplikasi Anda.
Langkah berikutnya
- Untuk mengetahui detail tentang setiap class dan konstanta, lihat referensi API Firebase PNV.
- Untuk memverifikasi token di server Anda, lihat Memverifikasi token Firebase PNV.