Wenn ein Aufruf der Firebase PNV-Bibliothek fehlschlägt, meldet die Bibliothek einen FirebasePhoneNumberVerificationException.
Auf dieser Seite werden alle Fehlercodes aufgeführt, die die Ausnahme enthalten kann, wann sie auftreten und was Ihre App tun sollte.
Auf dieser Seite wird davon ausgegangen, dass Sie Firebase PNV wie unter Erste Schritte mit Firebase Phone Number Verification für Android beschrieben eingebunden haben.
Wie Fehler gemeldet werden
Asynchrone Methoden (
getVerificationSupportInfo(),getVerifiedPhoneNumber()und die Methoden für den benutzerdefinierten Ablauf) geben einTask-Objekt zurück. Wenn sie fehlschlagen, schlägt dieTaskmit einemFirebasePhoneNumberVerificationExceptionfehl, den Sie inaddOnFailureListenererhalten.enableTestSession()ist synchron. Es wird direkt einFirebasePhoneNumberVerificationExceptionausgegeben.
Lesen Sie die errorCode der Ausnahme, um herauszufinden, was schiefgelaufen ist. Die Firebase PNV-Codes sind Konstanten in der Klasse FirebasePnvStatusCodes. Wenn der Fehler von den Google Play-Diensten stammt, kann errorCode auch ein CommonStatusCodes-Wert sein, z. B. NETWORK_ERROR.
Ein nicht unterstütztes Gerät oder eine nicht unterstützte SIM-Karte ist kein Fehler. getVerificationSupportInfo() erfolgreich ist und isSupported() als false für diese SIM meldet und getReason() Ihnen den Grund dafür nennt. Weitere Informationen finden Sie unter Nicht unterstützte Geräte und SIM-Karten.
Fehlercodes
Testsitzung einrichten
Diese Fehler werden synchron von enableTestSession() ausgegeben.
| Fehlercode | Ursache | Empfohlene Maßnahmen |
|---|---|---|
TEST_SESSION_ALREADY_ENABLED(55508) |
enableTestSession() wurde im selben App-Prozess mehrmals aufgerufen. FirebasePhoneNumberVerification.getInstance() gibt jedes Mal dieselbe Instanz zurück. Das passiert also auch, wenn ein Activity, der es aufruft, neu erstellt wird. |
Rufen Sie enableTestSession() einmal pro Prozess auf, z. B. in Application.onCreate(). Weitere Informationen finden Sie unter Bibliothek im Testmodus initialisieren. |
INVALID_TEST_NUMBER_ID(55507) |
Das an enableTestSession() übergebene Testtoken ist leer. |
Achten Sie darauf, dass Ihr Build das Token übergibt, das Sie in der Firebase-Konsole generiert haben, und rufen Sie enableTestSession() nur auf, wenn das Token nicht leer ist. |
Überprüfung
Diese Fehler führen dazu, dass der von getVerifiedPhoneNumber() zurückgegebene Task fehlschlägt.
| Fehlercode | Ursache | Empfohlene Maßnahmen |
|---|---|---|
CREDENTIAL_MANAGER_ERROR(55506) |
Der Android Credential Manager hat die Telefonnummer nicht zurückgegeben. Wenn der cause der Ausnahme ein GetCredentialCancellationException ist, hat der Nutzer den Zustimmungsbildschirm wahrscheinlich geschlossen. |
Bieten Sie eine andere Möglichkeit zur Bestätigung der Telefonnummer an, z. B. per SMS. Wiederholen Sie den Vorgang nicht automatisch, da der Nutzer sonst den Zustimmungsbildschirm noch einmal sieht. |
CARRIER_NOT_SUPPORTED(55501) |
Der Mobilfunkanbieter der ausgewählten SIM wird nicht unterstützt oder das Gerät verfügt nicht über die erforderlichen Aboinformationen, um es zu bestätigen. | Verwenden Sie eine andere Bestätigungsmethode, z. B. SMS. |
UNSUPPORTED_OPERATION(55505) |
Firebase PNV ist für diese Anfrage auf dem Gerät nicht verfügbar. | Verwenden Sie eine andere Bestätigungsmethode, z. B. SMS. |
PREFLIGHT_CHECK_FAILED(55504) |
Das Firebase PNV-Backend konnte die Überprüfungsanfrage nicht erstellen, bevor der Zustimmungsbildschirm angezeigt wurde. | Verwenden Sie eine andere Bestätigungsmethode, z. B. SMS. Wenn dies bei jeder Anfrage der Fall ist, prüfen Sie, ob Ihre App richtig eingerichtet ist (siehe Upgrade auf den Produktionsmodus). |
INTEGRITY_CHECK_FAILED(55503) |
Das Gerät oder die App hat eine Integritätsprüfung nicht bestanden. | Verwenden Sie eine andere Bestätigungsmethode, z. B. SMS. |
INVALID_DIGITAL_CREDENTIAL_RESPONSE(55502) |
Die Antwort von Credential Manager konnte nicht gelesen oder nicht gegen eine bestätigte Telefonnummer ausgetauscht werden. | Verwenden Sie eine andere Bestätigungsmethode, z. B. SMS. |
INVALID_TEST_NUMBER_ID(55507) |
Im Testmodus hat das Firebase PNV-Backend das Testtoken abgelehnt, z. B. weil es abgelaufen ist. Test-Tokens haben eine Gültigkeitsdauer von 7 Tagen. Ein abgelehnter Testtoken meldet normalerweise diesen Code. Wenn im Testmodus andere Fehler auftreten, prüfen Sie auch, ob Ihr Token aktuell ist. | Generieren Sie in der Firebase-Konsole ein neues Testtoken und erstellen Sie Ihre App neu. |
ACTIVITY_CONTEXT_REQUIRED(55509) |
Der an getVerifiedPhoneNumber() übergebene Context ist kein Activity. Die Methode benötigt ein Activity, um den Zustimmungsbildschirm anzuzeigen. |
Übergeben Sie die aktuelle Activity. Dies ist ein Fehler in Ihrer App, keine Bedingung, die zur Laufzeit verarbeitet werden muss. |
Support-Check
Der von getVerificationSupportInfo() zurückgegebene Task schlägt nur fehl, wenn die Prüfung selbst nicht ausgeführt werden kann. In diesem Fall ist errorCode entweder ein CommonStatusCodes-Wert der Google Play-Dienste oder CARRIER_NOT_SUPPORTED. Behandle das Gerät als nicht unterstützt und verwende eine andere Bestätigungsmethode, z. B. SMS.
Während eine Testsitzung aktiviert ist, kontaktiert getVerificationSupportInfo() nicht das Firebase PNV-Backend und meldet die Test-SIM immer als unterstützt, auch wenn das Testtoken abgelaufen ist.
Benutzerdefinierter Ablauf
Wenn Sie den benutzerdefinierten Ablauf anstelle von getVerifiedPhoneNumber() verwenden:
getDigitalCredentialPayload()schlägt mitPREFLIGHT_CHECK_FAILEDoder mitINVALID_TEST_NUMBER_IDfehl, wenn das Backend Ihr Testtoken ablehnt.exchangeCredentialResponseForPhoneNumber()schlägt mitINVALID_DIGITAL_CREDENTIAL_RESPONSEoder mitINVALID_TEST_NUMBER_IDfehl, wenn das Backend Ihr Testtoken ablehnt.- Ihr eigener Aufruf von Credential Manager löst eine
GetCredentialExceptionaus, die Sie direkt verarbeiten.
Nicht unterstützte Geräte und SIM-Karten
Wenn isSupported() für eine SIM-Karte false ist, gibt getReason() einen der folgenden VerificationSupportStatus-Werte zurück:
| Wert | Bedeutung |
|---|---|
INCAPABLE_DUE_TO_CARRIER_UNSUPPORTED |
Der Mobilfunkanbieter der SIM wird nicht unterstützt. Unterstützte Mobilfunkanbieter |
INCAPABLE_DUE_TO_ANDROID_VERSION |
Auf dem Gerät wird eine Android-Version vor Android 9 (API-Level 28) ausgeführt. |
INCAPABLE_DUE_TO_SIM_STATE |
Die SIM ist nicht bereit. Eine gesperrte oder noch ladende SIM-Karte kann ebenfalls INCAPABLE_DUE_TO_CARRIER_UNSUPPORTED melden, da der Mobilfunkanbieter zuerst geprüft wird. |
Verwenden Sie in jedem Fall eine andere Bestätigungsmethode, z. B. SMS, für diese SIM-Karte.
Beispiel
Im folgenden Beispiel werden die Fehler behandelt, die eine typische App beim Aufrufen von getVerifiedPhoneNumber() unterscheiden muss:
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 diesem Beispiel ist showSmsVerification() der vorhandene Ablauf zur Bestätigung der Telefonnummer in Ihrer App.
Nächste Schritte
- Details zu den einzelnen Klassen und Konstanten finden Sie in der Firebase PNV API-Referenz.
- Informationen zum Bestätigen des Tokens auf Ihrem Server finden Sie unter Firebase PNV-Tokens bestätigen.