Mit Firebase Authentication können Sie einen Nutzer anmelden, indem Sie eine SMS an sein Smartphone senden. Der Nutzer meldet sich mit einem Einmalcode an, der in der SMS enthalten ist.
In diesem Dokument wird beschrieben, wie Sie einen Anmeldevorgang mit Telefonnummer mithilfe des Firebase SDK implementieren.
Hinweis
- Fügen Sie Firebase zu Ihrem C++-Projekt hinzu.
- Wenn Sie Ihre App noch nicht mit Ihrem Firebase-Projekt verknüpft haben, holen Sie das in der Firebase Console nach.
- Machen Sie sich mit den Plattformanforderungen für die Anmeldung mit Telefonnummer vertraut:
- Die Anmeldung über Telefonnummer ist nur für mobile Plattformen verfügbar.
- Unter iOS ist für die Anmeldung mit Telefonnummer ein physisches Gerät erforderlich. Die Anmeldung funktioniert nicht auf einem Simulator.
Sicherheitsbedenken
Die Authentifizierung nur mit einer Telefonnummer ist zwar praktisch, aber weniger sicher als die anderen verfügbaren Methoden, da der Besitz einer Telefonnummer leicht zwischen Nutzern übertragen werden kann. Außerdem kann sich auf Geräten mit mehreren Nutzerprofilen jeder Nutzer, der SMS empfangen kann, mit der Telefonnummer des Geräts in einem Konto anmelden.
Wenn Sie die Anmeldung per Telefonnummer in Ihrer App anbieten, sollten Sie sie zusammen mit sichereren Anmeldemethoden anbieten und Nutzer über die Sicherheitsrisiken der Anmeldung per Telefonnummer informieren.
Anmeldung per Telefonnummer für Ihr Firebase-Projekt aktivieren
Wenn Sie Nutzer per SMS anmelden möchten, müssen Sie zuerst die Anmeldemethode „Telefonnummer“ für Ihr Firebase-Projekt aktivieren:
- Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung.
- Aktivieren Sie auf der Seite Sign-in Method (Anmeldemethode) die Anmeldemethode Phone Number (Telefonnummer).
- Optional: Legen Sie auf der Seite Einstellungen eine Richtlinie für die Regionen fest, in die Sie SMS-Nachrichten senden möchten. Durch Festlegen einer SMS-Regionsrichtlinie können Sie Ihre Apps vor SMS-Missbrauch schützen.
APNs-Benachrichtigungen erhalten (Apple-Plattformen)
Wenn Sie die Telefonnummernauthentifizierung auf Apple-Plattformen verwenden möchten, muss Ihre App APNs-Benachrichtigungen von Firebase empfangen können. Wenn Sie einen Nutzer zum ersten Mal auf einem Gerät mit seiner Telefonnummer anmelden, sendet Firebase Authentication eine lautlose Push-Benachrichtigung an das Gerät, um zu bestätigen, dass die Anmeldeanfrage mit der Telefonnummer von Ihrer App stammt. Aus diesem Grund kann die Anmeldung mit der Telefonnummer nicht auf einem Simulator verwendet werden.
So aktivieren Sie APN-Benachrichtigungen zur Verwendung mit Firebase Authentication:
- Aktivieren Sie Push-Benachrichtigungen für Ihr Projekt in Xcode.
Laden Sie Ihr APNs-Zertifikat in Firebase hoch. Wenn Sie noch kein APNs-Zertifikat haben, erstellen Sie eines im Apple Developer Member Center.
-
Wählen Sie in Ihrem Projekt in der Firebase-Konsole das Zahnradsymbol aus, dann Projekteinstellungen und schließlich den Tab Cloud Messaging.
-
Klicken Sie für Ihr Entwicklerzertifikat, Ihr Produktionszertifikat oder beides auf die Schaltfläche Zertifikat hochladen. Mindestens eine ist erforderlich.
-
Wählen Sie für jedes Zertifikat die .p12-Datei aus und geben Sie das Passwort an, falls erforderlich. Achten Sie darauf, dass die Paket-ID für dieses Zertifikat mit der Paket-ID Ihrer App übereinstimmt. Wählen Sie Speichern aus.
-
Bestätigungscode an das Mobiltelefon des Nutzers senden
Um die Anmeldung mit Telefonnummer zu initiieren, präsentieren Sie dem Nutzer eine Schnittstelle, in der er aufgefordert wird, seine Telefonnummer anzugeben. Rufen Sie dann PhoneAuthProvider::VerifyPhoneNumber
auf, um Firebase aufzufordern, einen Authentifizierungscode per SMS an das Telefon des Nutzers zu senden:
-
Die Telefonnummer des Nutzers abrufen.
Die rechtlichen Anforderungen variieren. Als Best Practice und um die Erwartungen Ihrer Nutzer zu erfüllen, sollten Sie sie jedoch darüber informieren, dass sie bei der Anmeldung mit dem Smartphone möglicherweise eine SMS zur Bestätigung erhalten und dass die üblichen Gebühren anfallen.
- Rufen Sie
PhoneAuthProvider::VerifyPhoneNumber
auf und übergeben Sie die Telefonnummer des Nutzers. Wenn Sieclass PhoneListener : public PhoneAuthProvider::Listener { public: ~PhoneListener() override {} void OnVerificationCompleted(PhoneAuthCredential credential) override { // Auto-sms-retrieval or instant validation has succeeded (Android only). // No need for the user to input the verification code manually. // `credential` can be used instead of calling GetCredential(). } void OnVerificationFailed(const std::string& error) override { // Verification code not sent. } void OnCodeSent(const std::string& verification_id, const PhoneAuthProvider::ForceResendingToken& force_resending_token) override { // Verification code successfully sent via SMS. // Show the Screen to enter the Code. // Developer may want to save that verification_id along with other app states in case // the app is terminated before the user gets the SMS verification code. } }; PhoneListener phone_listener; PhoneAuhtOptions options; options.timeout_milliseconds = kAutoVerifyTimeOut; options.phone_number = phone_number; PhoneAuthProvider& phone_provider = PhoneAuthProvider::GetInstance(auth); phone_provider->VerifyPhoneNumber(options, &phone_listener);
PhoneAuthProvider::VerifyPhoneNumber
, Firebase aufrufen,- (auf iOS) eine stille Push-Benachrichtigung an Ihre App sendet,
- sendet eine SMS mit einem Authentifizierungscode an die angegebene Telefonnummer und übergibt eine Bestätigungs-ID an Ihre Vervollständigungsfunktion. Sie benötigen sowohl den Bestätigungscode als auch die Bestätigungs-ID, um den Nutzer anzumelden.
-
Speichern Sie die Bestätigungs-ID und stellen Sie sie wieder her, wenn Ihre App geladen wird. So können Sie sicherstellen, dass Sie weiterhin eine gültige Bestätigungs-ID haben, wenn Ihre App beendet wird, bevor der Nutzer den Anmeldevorgang abschließt (z. B. beim Wechsel zur SMS-App).
Sie können die Bestätigungs-ID auf beliebige Weise speichern. Wenn Sie mit einem plattformübergreifenden C++-Framework schreiben, sollten Benachrichtigungen für das Beenden und Wiederherstellen von Apps bereitgestellt werden. Bei diesen Ereignissen können Sie die Bestätigungs-ID speichern und wiederherstellen.
Wenn der Aufruf von VerifyPhoneNumber
dazu führt, dass OnCodeSent
für Ihren Listener aufgerufen wird, können Sie den Nutzer auffordern, den Bestätigungscode einzugeben, wenn er ihn in der SMS erhält.
Wenn der Aufruf von VerifyPhoneNumber
hingegen OnVerificationCompleted
zurückgibt, war die automatische Überprüfung erfolgreich und Sie haben jetzt ein PhoneAuthCredential
, das Sie wie unten beschrieben verwenden können.
Nutzer mit dem Bestätigungscode anmelden
Nachdem der Nutzer Ihrer App den Bestätigungscode aus der SMS-Nachricht zur Verfügung gestellt hat, melden Sie ihn an, indem Sie ein PhoneAuthCredential
-Objekt aus dem Bestätigungscode und der Bestätigungs-ID erstellen und dieses Objekt an Auth::SignInWithCredential
übergeben.
- Fordern Sie den Bestätigungscode vom Nutzer an.
- Erstellen Sie ein
Credential
-Objekt aus dem Bestätigungscode und der Bestätigungs-ID.PhoneAuthCredential credential = phone_auth_provider->GetCredential( verification_id_.c_str(), verification_code.c_str());
- Melden Sie den Nutzer mit dem
Credential
-Objekt an:Future<User> future = auth_->SignInWithCredential(credential); future.OnCompletion( [](const Future<User*>& result, void*) { if (result.error() == kAuthErrorNone) { // Successful. // User is signed in. User user = *result.result(); // This should display the phone number. printf("Phone number: %s", user.phone_number().c_str()); // The phone number provider UID is the phone number itself. printf("Phone provider uid: %s", user.uid().c_str()); // The phone number providerID is 'phone' printf("Phone provider ID: %s", user.provider_id().c_str()); } else { // Error. printf("Sign in error: %s", result.error_message().c_str()); } }, nullptr);
Nächste Schritte
Wenn sich ein Nutzer zum ersten Mal anmeldet, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, mit denen sich der Nutzer angemeldet hat, also mit dem Nutzernamen und Passwort, der Telefonnummer oder den Informationen des Authentifizierungsanbieters. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps Ihres Projekts zu identifizieren, unabhängig davon, wie sich der Nutzer anmeldet.
-
In Ihren Apps können Sie die grundlegenden Profilinformationen des Nutzers aus dem Objekt
firebase::auth::User
firebase::auth::User
abrufen:firebase::auth::User user = auth->current_user(); if (user.is_valid()) { std::string name = user.display_name(); std::string email = user.email(); std::string photo_url = user.photo_url(); // The user's ID, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, // if you have one. Use firebase::auth::User::Token() instead. std::string uid = user.uid(); }
In Ihren Firebase Realtime Database- und Cloud Storage-Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen
auth
abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.
Sie können Nutzern erlauben, sich mit mehreren Authentifizierungsanbietern in Ihrer App anzumelden, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen.
Rufen Sie
SignOut()
auf, um einen Nutzer abzumelden:
auth->SignOut();