Quando una chiamata alla libreria Firebase PNV non va a buon fine, la libreria segnala un errore FirebasePhoneNumberVerificationException.
In questa pagina sono elencati tutti i codici di errore che l'eccezione può contenere, quando si verificano e cosa deve fare la tua app.
Questa pagina presuppone che tu abbia integrato Firebase PNV come descritto in Inizia a utilizzare Firebase Phone Number Verification su Android.
Come vengono segnalati gli errori
I metodi asincroni (
getVerificationSupportInfo(),getVerifiedPhoneNumber()e i metodi del flusso personalizzato) restituiscono unTask. In caso di errore,Tasknon va a buon fine con unFirebasePhoneNumberVerificationException, che ricevi inaddOnFailureListener.enableTestSession()è sincrono. Genera direttamente unFirebasePhoneNumberVerificationException.
Leggi il errorCode dell'eccezione per scoprire cosa non ha funzionato. I codici Firebase PNV sono costanti nella classe FirebasePnvStatusCodes. Se l'errore proviene da Google Play Services, errorCode può anche essere un valore
CommonStatusCodes,
ad esempio NETWORK_ERROR.
Un dispositivo o una SIM non supportati non sono un errore. getVerificationSupportInfo()
ha esito positivo e segnala isSupported() come false per la SIM, mentre getReason()
ti spiega il motivo. Consulta la sezione Dispositivi e SIM non supportati.
Codici di errore
Configurazione della sessione di test
Questi errori vengono generati in modo sincrono da enableTestSession().
| Codice di errore | Causa | Azione consigliata |
|---|---|---|
TEST_SESSION_ALREADY_ENABLED(55508) |
enableTestSession() è stato chiamato più di una volta nello stesso processo dell'app. FirebasePhoneNumberVerification.getInstance()
restituisce ogni volta la stessa istanza, quindi questo accade anche quando viene ricreato un
Activity che la chiama. |
Chiama enableTestSession() una volta per processo, ad esempio in Application.onCreate(). Consulta
Inizializza la libreria in modalità di test. |
INVALID_TEST_NUMBER_ID(55507) |
Il token di test passato a enableTestSession() è vuoto. |
Assicurati che la build passi il token generato nella console Firebase e chiama enableTestSession() solo quando il token non è vuoto. |
Verifica
Questi errori causano l'esito negativo di Task restituito da getVerifiedPhoneNumber().
| Codice di errore | Causa | Azione consigliata |
|---|---|---|
CREDENTIAL_MANAGER_ERROR(55506) |
Gestore delle credenziali Android non ha restituito il numero di telefono. Se l'eccezione cause è GetCredentialCancellationException, l'utente molto probabilmente ha ignorato la schermata per il consenso. |
Offri un altro modo per verificare il numero di telefono, ad esempio tramite SMS. Non riprovare automaticamente, perché l'utente vedrebbe di nuovo la schermata per il consenso. |
CARRIER_NOT_SUPPORTED(55501) |
L'operatore della SIM selezionata non è supportato o il dispositivo non dispone delle informazioni sull'abbonamento necessarie per la verifica. | Utilizza un altro metodo di verifica, ad esempio gli SMS. |
UNSUPPORTED_OPERATION(55505) |
Firebase PNV non è disponibile per questa richiesta sul dispositivo. | Utilizza un altro metodo di verifica, ad esempio gli SMS. |
PREFLIGHT_CHECK_FAILED(55504) |
Il backend Firebase PNV non ha potuto creare la richiesta di verifica prima che venisse visualizzata la schermata per il consenso. | Utilizza un altro metodo di verifica, ad esempio gli SMS. Se si verifica per ogni richiesta, verifica che l'app sia configurata correttamente (consulta Esegui l'upgrade alla modalità di produzione). |
INTEGRITY_CHECK_FAILED(55503) |
Il dispositivo o l'app non ha superato un controllo di integrità. | Utilizza un altro metodo di verifica, ad esempio gli SMS. |
INVALID_DIGITAL_CREDENTIAL_RESPONSE(55502) |
Impossibile leggere la risposta di Gestore delle credenziali o scambiarla con un numero di telefono verificato. | Utilizza un altro metodo di verifica, ad esempio gli SMS. |
INVALID_TEST_NUMBER_ID(55507) |
In modalità di test, il backend Firebase PNV ha rifiutato il token di test, ad esempio perché è scaduto. I token di test hanno un TTL di 7 giorni. Un token di test rifiutato di solito segnala questo codice. Se visualizzi altri errori in modalità di test, verifica anche che il token sia aggiornato. | Genera un nuovo token di test nella console Firebase e ricrea l'app. |
ACTIVITY_CONTEXT_REQUIRED(55509) |
Il valore Context passato a getVerifiedPhoneNumber()
non è un Activity. Il metodo richiede un Activity per mostrare la schermata per il consenso. |
Passa l'oggetto Activity corrente. Si tratta di un bug nell'app, non di una condizione da gestire in fase di runtime. |
Controllo dell'assistenza
L'oggetto Task restituito da getVerificationSupportInfo() non va a buon fine solo se il controllo stesso non può essere eseguito. In questo caso, errorCode è un valore di Google Play Services
CommonStatusCodes o CARRIER_NOT_SUPPORTED. Considera il dispositivo come non supportato e utilizza un altro metodo di verifica, ad esempio l'SMS.
Mentre è attiva una sessione di test, getVerificationSupportInfo() non contatta il backend Firebase PNV e segnala sempre la SIM di test come supportata, anche se il token di test è scaduto.
Flusso personalizzato
Se utilizzi il flusso personalizzato anziché
getVerifiedPhoneNumber():
getDigitalCredentialPayload()non va a buon fine conPREFLIGHT_CHECK_FAILEDo conINVALID_TEST_NUMBER_IDse il backend rifiuta il token di test.exchangeCredentialResponseForPhoneNumber()non riesce conINVALID_DIGITAL_CREDENTIAL_RESPONSEo conINVALID_TEST_NUMBER_IDse il backend rifiuta il token di test.- La tua chiamata a Gestore delle credenziali genera un'eccezione
GetCredentialException, che gestisci direttamente.
Dispositivi e SIM non supportati
Quando isSupported() è false per una SIM, getReason() restituisce uno dei seguenti valori VerificationSupportStatus:
| Valore | Significato |
|---|---|
INCAPABLE_DUE_TO_CARRIER_UNSUPPORTED |
L'operatore della SIM non è supportato. Consulta Operatori supportati. |
INCAPABLE_DUE_TO_ANDROID_VERSION |
Il dispositivo esegue una versione di Android precedente ad Android 9 (livello API 28). |
INCAPABLE_DUE_TO_SIM_STATE |
La SIM non è pronta. Anche una SIM bloccata o ancora in fase di caricamento può segnalare INCAPABLE_DUE_TO_CARRIER_UNSUPPORTED, perché l'operatore viene controllato per primo. |
In ogni caso, utilizza un altro metodo di verifica, ad esempio gli SMS, per la SIM.
Esempio
L'esempio seguente gestisce gli errori che una tipica app deve distinguere quando chiama 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()
}
}
}
In questo esempio, showSmsVerification() è il flusso di verifica del numero di telefono esistente della tua app.
Passaggi successivi
- Per i dettagli su ogni classe e costante, consulta il Riferimento API Firebase PNV.
- Per verificare il token sul tuo server, consulta Verifica i token Firebase PNV.