Authentifizieren Sie sich bei Firebase mithilfe einer Telefonnummer mit Unity

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 Einmalcode an, der in der SMS-Nachricht enthalten ist.

In diesem Dokument wird beschrieben, wie Sie mit dem Firebase SDK einen Anmeldevorgang für Telefonnummern implementieren.

Bevor Sie beginnen

  1. Bevor Sie Firebase Authentication verwenden können, müssen Sie das Firebase Unity SDK (insbesondere FirebaseAuth.unitypackage ) zu Ihrem Unity-Projekt hinzufügen.

    Ausführliche Anweisungen für diese ersten Einrichtungsschritte finden Sie unter Firebase zu Ihrem Unity-Projekt hinzufügen .

  2. Wenn Sie Ihre App noch nicht mit Ihrem Firebase-Projekt verbunden haben, tun Sie dies über die Firebase-Konsole .
  3. Machen Sie sich mit den Plattformanforderungen für die Telefonnummernanmeldung vertraut:
    • Die Anmeldung per Telefonnummer ist nur für mobile Plattformen möglich.
    • Unter iOS erfordert die Anmeldung mit der Telefonnummer ein physisches Gerät und 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 Benutzern übertragen werden kann. Außerdem kann sich auf Geräten mit mehreren Benutzerprofilen jeder Benutzer, der SMS-Nachrichten empfangen kann, mit der Telefonnummer des Geräts bei einem Konto anmelden.

Wenn Sie in Ihrer App die auf Telefonnummern basierende Anmeldung verwenden, sollten Sie diese zusammen mit sichereren Anmeldemethoden anbieten und Benutzer über die Sicherheitsabstriche bei der Verwendung der Telefonnummernanmeldung informieren.

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

Um Benutzer per SMS anzumelden, müssen Sie zunächst die Anmeldemethode „Telefonnummer“ für Ihr Firebase-Projekt aktivieren:

  1. Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung .
  2. Aktivieren Sie auf der Seite „Anmeldemethode“ die Anmeldemethode „Telefonnummer“ .

Das Kontingent von Firebase-Anmeldeanfragen für Telefonnummern ist hoch genug, dass 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 Preisseite .

Beginnen Sie mit dem Empfang von APNs-Benachrichtigungen (nur 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 mit seiner Telefonnummer auf einem Gerät anmelden, sendet Firebase Authentication 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 Telefonnummernanmeldung in einem Simulator nicht verwendet werden.)

So aktivieren Sie APNs-Benachrichtigungen für die Verwendung mit 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 APNs-Zertifikat haben, stellen Sie sicher, dass Sie eines im Apple Developer Member Center erstellen.

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

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

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

Senden Sie einen Bestätigungscode an das Telefon des Benutzers

Um die Anmeldung über die Telefonnummer zu initiieren, präsentieren Sie dem Benutzer eine Schnittstelle, die ihn zur Angabe seiner Telefonnummer auffordert, und rufen Sie dann PhoneAuthProvider.VerifyPhoneNumber auf, um Firebase aufzufordern, per SMS einen Authentifizierungscode an das Telefon des Benutzers zu senden:

  1. Rufen Sie die Telefonnummer des Benutzers ab.

    Die rechtlichen Anforderungen variieren. Als Best Practice und um die Erwartungen Ihrer Benutzer zu wecken, sollten Sie sie jedoch darüber informieren, dass sie bei Verwendung der telefonischen Anmeldung möglicherweise eine SMS-Nachricht zur Überprüfung erhalten und Standardtarife gelten.

  2. Rufen Sie PhoneAuthProvider.VerifyPhoneNumber auf und übergeben Sie eine PhoneAuthOptions mit der Telefonnummer des Benutzers.
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(
      new Firebase.Auth.PhoneAuthOptions {
        PhoneNumber = phoneNumber,
        TimeoutInMilliseconds = phoneAuthTimeoutMs,
        ForceResendingToken = null
      },
      verificationCompleted: (credential) => {
        // Auto-sms-retrieval or instant validation has succeeded (Android only).
        // There is no need to input the verification code.
        // `credential` can be used instead of calling GetCredential().
      },
      verificationFailed: (error) => {
        // The verification code was not sent.
        // `error` contains a human readable explanation of the problem.
      },
      codeSent: (id, token) => {
        // Verification code was successfully sent via SMS.
        // `id` contains the verification id that will need to passed in with
        // the code from the user when calling GetCredential().
        // `token` can be used if the user requests the code be sent again, to
        // tie the two requests together.
      },
      codeAutoRetrievalTimeout: (id) => {
        // Called when the auto-sms-retrieval has timed out, based on the given
        // timeout parameter.
        // `id` contains the verification id of the request that timed out.
      });
    
    Wenn Sie PhoneAuthProvider.VerifyPhoneNumber , Firebase, aufrufen,
    • (unter iOS) sendet eine stille Push-Benachrichtigung an Ihre App.
    • Firebase sendet eine SMS-Nachricht 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 Benutzer anzumelden.
  3. Speichern Sie die Verifizierungs-ID und stellen Sie sie wieder her, wenn Ihre App geladen wird. Auf diese Weise können Sie sicherstellen, dass Sie immer noch über eine gültige Verifizierungs-ID verfügen, wenn Ihre App beendet wird, bevor der Benutzer den Anmeldevorgang abschließt (z. B. beim Wechsel zur SMS-App).

    Sie können die Verifizierungs-ID beliebig beibehalten. Eine einfache Möglichkeit besteht darin, die Verifizierungs-ID mit UnityEngine.PlayerPrefs zu speichern.

Wenn der an codeSent übergebene Rückruf aufgerufen wird, können Sie den Benutzer auffordern, den Bestätigungscode einzugeben, wenn er ihn in der SMS-Nachricht erhält.

Wenn andererseits der Rückruf für verificationCompleted aufgerufen wird, dann war die automatische Überprüfung erfolgreich und Sie verfügen nun über ein PhoneAuthCredential , mit dem Sie wie unten beschrieben verwenden können.

Melden Sie den Benutzer mit dem Bestätigungscode an

Nachdem der Benutzer Ihrer App den Bestätigungscode aus der SMS-Nachricht bereitgestellt hat, melden Sie den Benutzer an, indem Sie aus dem Bestätigungscode und der Bestätigungs-ID ein PhoneAuthCredential Objekt erstellen und dieses Objekt an FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync übergeben.

  1. Holen Sie sich den Bestätigungscode vom Benutzer.
  2. Erstellen Sie aus dem Bestätigungscode und der Bestätigungs-ID ein Credential Objekt.
    PhoneAuthCredential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. Melden Sie den Benutzer mit dem PhoneAuthCredential -Objekt an:
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " +
                       task.Exception);
        return;
      }
    
      FirebaseUser newUser = task.Result.User;
      Debug.Log("User signed in successfully");
      // This should display the phone number.
      Debug.Log("Phone number: " + newUser.PhoneNumber);
      // The phone number providerID is 'phone'.
      Debug.Log("Phone provider ID: " + newUser.ProviderId);
    });
    

Nächste Schritte

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

  • In Ihren Apps können Sie die grundlegenden Profilinformationen des Benutzers aus dem Firebase.Auth.FirebaseUser -Objekt abrufen:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // 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 User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • In Ihren Firebase-Echtzeitdatenbank- und Cloud-Speicher- Sicherheitsregeln können Sie die eindeutige Benutzer-ID des angemeldeten Benutzers aus der auth abrufen und damit steuern, auf welche Daten ein Benutzer zugreifen kann.

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

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

auth.SignOut();