En cas d'échec d'un appel à la bibliothèque Firebase PNV, celle-ci renvoie un FirebasePhoneNumberVerificationException.
Cette page liste tous les codes d'erreur que l'exception peut contenir, quand chacun d'eux se produit et ce que votre application doit faire.
Cette page suppose que vous avez intégré Firebase PNV comme décrit dans Premiers pas avec Firebase Phone Number Verification sur Android.
Comment les erreurs sont-elles signalées ?
Les méthodes asynchrones (
getVerificationSupportInfo(),getVerifiedPhoneNumber()et les méthodes de flux personnalisé) renvoient unTask. En cas d'échec, l'Taskéchoue avec unFirebasePhoneNumberVerificationException, que vous recevez dansaddOnFailureListener.enableTestSession()est synchrone. Elle génère directement une exceptionFirebasePhoneNumberVerificationException.
Lisez le errorCode de l'exception pour découvrir ce qui s'est mal passé. Les codes Firebase PNV sont des constantes de la classe FirebasePnvStatusCodes. Si l'échec provient des services Google Play, errorCode peut également être une valeur CommonStatusCodes, telle que NETWORK_ERROR.
Un appareil ou une carte SIM non compatibles ne constituent pas une erreur. getVerificationSupportInfo() réussit et indique isSupported() comme false pour cette carte SIM, et getReason() vous indique pourquoi. Consultez Appareils et cartes SIM non compatibles.
Codes d'erreur
Configuration de la session de test
Ces erreurs sont générées de manière synchrone par enableTestSession().
| Code d'erreur | Cause | Action recommandée |
|---|---|---|
TEST_SESSION_ALREADY_ENABLED(55508) |
enableTestSession() a été appelé plusieurs fois dans le même processus d'application. FirebasePhoneNumberVerification.getInstance() renvoie la même instance à chaque fois. Cela se produit donc également lorsqu'un Activity qui l'appelle est recréé. |
Appelez enableTestSession() une fois par processus, par exemple dans Application.onCreate(). Consultez Initialiser la bibliothèque en mode test. |
INVALID_TEST_NUMBER_ID(55507) |
Le jeton de test transmis à enableTestSession() est vide. |
Assurez-vous que votre build transmet le jeton que vous avez généré dans la console Firebase et n'appelez enableTestSession() que lorsque le jeton n'est pas vide. |
Validation
Ces erreurs entraînent l'échec de l'Task renvoyé par getVerifiedPhoneNumber().
| Code d'erreur | Cause | Action recommandée |
|---|---|---|
CREDENTIAL_MANAGER_ERROR(55506) |
Le Gestionnaire d'identifiants Android n'a pas renvoyé le numéro de téléphone. Si l'cause de l'exception est un GetCredentialCancellationException, l'utilisateur a probablement fermé l'écran de consentement. |
Proposez une autre méthode pour valider le numéro de téléphone, par exemple par SMS. Ne réessayez pas automatiquement, car l'utilisateur verrait à nouveau l'écran de consentement. |
CARRIER_NOT_SUPPORTED(55501) |
L'opérateur de la carte SIM sélectionnée n'est pas compatible, ou l'appareil ne dispose pas des informations d'abonnement nécessaires pour la valider. | Utilisez une autre méthode de validation, comme les SMS. |
UNSUPPORTED_OPERATION(55505) |
Firebase PNV n'est pas disponible pour cette requête sur l'appareil. | Utilisez une autre méthode de validation, comme les SMS. |
PREFLIGHT_CHECK_FAILED(55504) |
Le backend Firebase PNV n'a pas pu créer la demande de validation avant l'affichage de l'écran de consentement. | Utilisez une autre méthode de validation, comme les SMS. Si cela se produit pour chaque requête, vérifiez que votre application est correctement configurée (voir Passer en mode production). |
INTEGRITY_CHECK_FAILED(55503) |
L'appareil ou l'application n'a pas réussi une vérification de l'intégrité. | Utilisez une autre méthode de validation, comme les SMS. |
INVALID_DIGITAL_CREDENTIAL_RESPONSE(55502) |
La réponse de Credential Manager n'a pas pu être lue ou n'a pas pu être échangée contre un numéro de téléphone validé. | Utilisez une autre méthode de validation, comme les SMS. |
INVALID_TEST_NUMBER_ID(55507) |
En mode test, le backend Firebase PNV a rejeté le jeton de test, par exemple parce qu'il a expiré. Les jetons de test ont une valeur TTL de sept jours. Un jeton de test refusé renvoie généralement ce code. Si vous voyez d'autres erreurs en mode test, vérifiez également que votre jeton est à jour. | Générez un nouveau jeton de test dans la console Firebase et recompilez votre application. |
ACTIVITY_CONTEXT_REQUIRED(55509) |
La valeur Context transmise à getVerifiedPhoneNumber() n'est pas un Activity. La méthode nécessite un Activity pour afficher l'écran de consentement. |
Transmettez le Activity actuel. Il s'agit d'un bug dans votre application, et non d'une condition à gérer au moment de l'exécution. |
Vérification de la compatibilité
La valeur Task renvoyée par getVerificationSupportInfo() n'échoue que si la vérification elle-même ne peut pas s'exécuter. Dans ce cas, errorCode est une valeur CommonStatusCodes des services Google Play ou CARRIER_NOT_SUPPORTED. Traitez l'appareil comme non compatible et utilisez une autre méthode de validation, comme les SMS.
Lorsqu'une session de test est activée, getVerificationSupportInfo() ne contacte pas le backend Firebase PNV et indique toujours que la carte SIM de test est compatible, même si le jeton de test a expiré.
Flux personnalisé
Si vous utilisez le flux personnalisé au lieu de getVerifiedPhoneNumber() :
getDigitalCredentialPayload()échoue avecPREFLIGHT_CHECK_FAILEDou avecINVALID_TEST_NUMBER_IDsi le backend rejette votre jeton de test.exchangeCredentialResponseForPhoneNumber()échoue avecINVALID_DIGITAL_CREDENTIAL_RESPONSEou avecINVALID_TEST_NUMBER_IDsi le backend rejette votre jeton de test.- Votre propre appel à Credential Manager génère une exception
GetCredentialException, que vous gérez directement.
Appareils et cartes SIM non compatibles
Lorsque isSupported() est défini sur false pour une carte SIM, getReason() renvoie l'une des valeurs VerificationSupportStatus suivantes :
| Valeur | Signification |
|---|---|
INCAPABLE_DUE_TO_CARRIER_UNSUPPORTED |
L'opérateur de la carte SIM n'est pas pris en charge. Consultez Opérateurs compatibles. |
INCAPABLE_DUE_TO_ANDROID_VERSION |
L'appareil exécute une version d'Android antérieure à Android 9 (niveau d'API 28). |
INCAPABLE_DUE_TO_SIM_STATE |
La carte SIM n'est pas prête. Une carte SIM verrouillée ou en cours de chargement peut également renvoyer INCAPABLE_DUE_TO_CARRIER_UNSUPPORTED, car l'opérateur est vérifié en premier. |
Dans chaque cas, utilisez une autre méthode de validation, comme les SMS, pour cette carte SIM.
Exemple
L'exemple suivant gère les erreurs qu'une application type doit distinguer lors de l'appel de 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()
}
}
}
Dans cet exemple, showSmsVerification() correspond au flux de validation du numéro de téléphone existant de votre application.
Étapes suivantes
- Pour en savoir plus sur chaque classe et constante, consultez la documentation de référence de l'API Firebase PNV.
- Pour valider le jeton sur votre serveur, consultez Valider les jetons Firebase PNV.