Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Authentifizieren Sie sich mit Firebase unter Verwendung einer Telefonnummer und C ++

Sie können die Firebase-Authentifizierung verwenden, um einen Benutzer anzumelden, indem Sie eine SMS-Nachricht an das Telefon des Benutzers senden. Der Benutzer meldet sich mit einem in der SMS-Nachricht enthaltenen Einmalcode an.

In diesem Dokument wird beschrieben, wie Sie einen Anmeldefluss für Telefonnummern mithilfe des Firebase SDK implementieren.

Bevor Sie beginnen

  1. Fügen Sie Ihrem C ++ - Projekt Firebase hinzu .
  2. build.gradle in Ihrer build.gradle Datei auf Projektebene sicher, dass das Maven-Repository von Google sowohl in Ihrem buildscript als auch in Ihrem allprojects Abschnitt enthalten ist.
  3. Wenn Sie Ihre App noch nicht mit Ihrem Firebase-Projekt verbunden haben, tun Sie dies über die Firebase-Konsole .

Beachten Sie unter iOS, dass für die Anmeldung der Telefonnummer ein physisches Gerät erforderlich ist und auf einem Simulator nicht funktioniert.

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 Benutzern übertragen werden kann. Auf Geräten mit mehreren Benutzerprofilen kann sich jeder Benutzer, der SMS-Nachrichten empfangen kann, unter Verwendung der Telefonnummer des Geräts bei einem Konto anmelden.

Wenn Sie in Ihrer App eine auf Telefonnummern basierende Anmeldung verwenden, sollten Sie diese neben sichereren Anmeldemethoden anbieten und die Benutzer über die Sicherheitslücken bei der Verwendung der Anmeldung mit Telefonnummern informieren.

Aktivieren Sie die Anmeldung zur Telefonnummer für Ihr Firebase-Projekt

Um Benutzer per SMS anzumelden, müssen Sie zuerst die Anmeldemethode für die Telefonnummer für Ihr Firebase-Projekt aktivieren:

  1. Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung .
  2. Auf der Sign-in - Methode Seite, aktivieren Sie die Telefonnummer Anmelde-Verfahren.

Das Anmeldeanforderungskontingent für die Telefonnummer von Firebase ist hoch genug, damit die meisten Apps nicht betroffen sind. Wenn Sie jedoch eine sehr große Anzahl von Benutzern mit Telefonauthentifizierung anmelden müssen, müssen Sie möglicherweise Ihren Preisplan aktualisieren. Siehe die Preisseite .

Empfangen Sie APNs-Benachrichtigungen (iOS)

Um die Telefonnummernauthentifizierung unter iOS verwenden zu können, muss Ihre App APN-Benachrichtigungen von Firebase empfangen können. Wenn Sie einen Benutzer zum ersten Mal auf einem Gerät mit seiner Telefonnummer anmelden, sendet die Firebase-Authentifizierung eine stille Push-Benachrichtigung an das Gerät, um zu überprüfen, ob die Anmeldeanforderung für die Telefonnummer von Ihrer App stammt. (Aus diesem Grund kann die Anmeldung zur Telefonnummer in einem Simulator nicht verwendet werden.)

So aktivieren Sie APN-Benachrichtigungen für die Verwendung mit der Firebase-Authentifizierung:

  1. Aktivieren Sie in Xcode Push-Benachrichtigungen für Ihr Projekt.
  2. Laden Sie Ihr APNs-Zertifikat auf Firebase hoch. Wenn Sie noch kein APN-Zertifikat haben, lesen Sie Bereitstellen von APN-SSL-Zertifikaten .

    1. Wählen Sie in Ihrem Projekt in der Firebase-Konsole das Zahnradsymbol aus, wählen Sie Projekteinstellungen und dann die Registerkarte Cloud Messaging .

    2. Wählen Sie die Schaltfläche Zertifikat hochladen für Ihr Entwicklungszertifikat, Ihr Produktionszertifikat oder beides. Mindestens einer ist erforderlich.

    3. Wählen Sie für jedes Zertifikat die P12-Datei aus und geben Sie gegebenenfalls das Kennwort ein. Stellen Sie sicher, dass die Bundle-ID für dieses Zertifikat mit der Bundle-ID Ihrer App übereinstimmt. Wählen Sie Speichern .

Senden Sie einen Bestätigungscode an das Telefon des Benutzers

Um die Anmeldung der Telefonnummer zu initiieren, präsentieren Sie dem Benutzer eine Benutzeroberfläche, in der er aufgefordert wird, seine Telefonnummer PhoneAuthProvider::VerifyPhoneNumber , und rufen PhoneAuthProvider::VerifyPhoneNumber dann PhoneAuthProvider::VerifyPhoneNumber an, um Firebase PhoneAuthProvider::VerifyPhoneNumber , einen Authentifizierungscode per SMS an das Telefon des Benutzers zu senden:

  1. Holen Sie sich die Telefonnummer des Benutzers.

    Die gesetzlichen Anforderungen variieren, aber als bewährte Methode und um die Erwartungen Ihrer Benutzer festzulegen, sollten Sie sie darüber informieren, dass sie bei Verwendung der Telefonanmeldung möglicherweise eine SMS-Nachricht zur Überprüfung erhalten und Standardtarife gelten.

  2. Rufen Sie PhoneAuthProvider::VerifyPhoneNumber und übergeben Sie die Telefonnummer des Benutzers.
    class PhoneListener : public PhoneAuthProvider::Listener {
     public:
      ~PhoneListener() override {}
    
      void OnVerificationCompleted(Credential 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;
    PhoneAuthProvider& phone_provider = PhoneAuthProvider::GetInstance(auth);
    phone_provider->VerifyPhoneNumber(phone_number, kAutoVerifyTimeOut, null,
                                      &phone_listener);
    
    Wenn Sie PhoneAuthProvider::VerifyPhoneNumber , Firebase,
    • (unter iOS) sendet eine stille Push-Benachrichtigung an Ihre App.
    • sendet eine SMS-Nachricht mit einem Authentifizierungscode an die angegebene Telefonnummer und übergibt eine Bestätigungs-ID an Ihre Abschlussfunktion. Sie benötigen sowohl den Bestätigungscode als auch die Bestätigungs-ID, um sich beim Benutzer anzumelden.
  3. Speichern Sie die Bestätigungs-ID und stellen Sie sie wieder her, wenn Ihre App geladen wird. Auf diese Weise können Sie sicherstellen, dass Sie immer noch eine gültige Bestätigungs-ID haben, wenn Ihre App beendet wird, bevor der Benutzer den Anmeldevorgang abschließt (z. B. beim Wechsel zur SMS-App).

    Sie können die Bestätigungs-ID beliebig beibehalten. Wenn Sie mit einem plattformübergreifenden C ++ - Framework schreiben, sollte es Benachrichtigungen für die Beendigung und Wiederherstellung von Apps bereitstellen. Bei diesen Ereignissen können Sie die Bestätigungs-ID speichern bzw. wiederherstellen.

Wenn der Aufruf von VerifyPhoneNumber führt, dass OnCodeSent auf Ihrem Listener aufgerufen wird, können Sie den Benutzer OnCodeSent , den VerifyPhoneNumber OnCodeSent , wenn er in der SMS-Nachricht empfangen wird.

Auf der anderen Seite, wenn der Anruf zu VerifyPhoneNumber Ergebnissen in OnVerificationCompleted , dann automatische Überprüfung gelungen ist , und Sie haben jetzt eine Credential , mit dem Sie wie unten beschrieben , verwendet werden können.

Melden Sie sich beim Benutzer mit dem Bestätigungscode an

Nachdem der Benutzer Ihrer App den Bestätigungscode aus der SMS-Nachricht Auth::SignInWithCredential an, indem Sie aus dem Bestätigungscode und der Bestätigungs-ID ein Credential erstellen und dieses Objekt an Auth::SignInWithCredential .

  1. Holen Sie sich den Bestätigungscode vom Benutzer.
  2. Erstellen Sie ein Credential aus dem Bestätigungscode und der Bestätigungs-ID.
    Credential credential = phone_auth_provider->GetCredential(
        verification_id_.c_str(), verification_code.c_str());
        
  3. Melden Sie den Benutzer mit dem Objekt " Credential :
    Future<User*> future = auth_->SignInWithCredential(credential);
    future.OnCompletion(
        [](const Future<User*>& result, void*) {
          if (result.error() == kAuthErrorNone) {
            // Successful.
            // User is signed in.
            const 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

Nachdem sich ein Benutzer zum ersten Mal angemeldet hat, wird ein neues Benutzerkonto erstellt und mit den Anmeldeinformationen verknüpft, dh dem Benutzernamen und dem Kennwort, der Telefonnummer oder den Informationen zum Authentifizierungsanbieter, mit denen sich der Benutzer angemeldet hat. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Benutzer in jeder App in Ihrem Projekt zu identifizieren, unabhängig davon, wie sich der Benutzer anmeldet.

  • In Ihren Apps können Sie die grundlegenden Profilinformationen des Benutzers aus dem firebase::auth::User Objekt firebase::auth::User :

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      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- Sicherheitsregeln für Echtzeitdatenbanken und Cloud-Speicher können Sie die eindeutige Benutzer-ID des angemeldeten Benutzers aus der auth und damit steuern, auf welche Daten ein Benutzer zugreifen kann.

Sie können Benutzern erlauben, sich mit mehreren Authentifizierungsanbietern bei Ihrer App anzumelden, indem Sie die Anmeldeinformationen des Authentifizierungsanbieters mit einem vorhandenen Benutzerkonto verknüpfen.

Um einen Benutzer SignOut() , rufen Sie SignOut() :

auth->SignOut();