Mit Apple und Unity authentifizieren

Sie können zulassen, dass sich Ihre Nutzer mit ihrer Apple-ID bei Firebase authentifizieren. Dazu müssen Sie nur mit dem Firebase SDK, um den OAuth 2.0-End-to-End-Anmeldevorgang durchzuführen.

Hinweis

Wenn Sie Nutzer über Apple anmelden möchten, müssen Sie zuerst die Anmeldung über Apple auf der Entwicklerwebsite von Apple konfigurieren und dann Apple als Anmeldeanbieter für Ihr Firebase-Projekt aktivieren.

Am Apple Developer Program teilnehmen

„Über Apple anmelden“ kann nur von Mitgliedern des Apple-Entwicklerprogramms konfiguriert werden.

„Über Apple anmelden“ konfigurieren

Apple Log-in muss in Ihrem Firebase-Projekt aktiviert und ordnungsgemäß konfiguriert sein. Die Apple Developer-Konfiguration variiert je nach Android- und Apple-Plattform. Lesen Sie den Abschnitt „Mit Apple anmelden konfigurieren“ in den Anleitungen für iOS 13 und höher und/oder Android, bevor Sie fortfahren.

Apple als Anmeldeanbieter aktivieren

  1. Öffnen Sie in der Firebase-Konsole den Abschnitt Auth. Gehen Sie auf dem Tab Anmeldemethode Aktivieren Sie den Apple-Anbieter.
  2. Konfigurieren Sie die Anbietereinstellungen für die Anmeldung über Apple:
    1. Wenn Sie Ihre App nur auf Apple-Plattformen bereitstellen, können Sie die Felder „Dienst-ID“, „Apple-Team-ID“, „Privater Schlüssel“ und „Schlüssel-ID“ leer lassen.
    2. Support auf Android-Geräten:
      1. Fügen Sie Ihrem Android-Projekt Firebase hinzu. Registrieren Sie die SHA-1-Signatur Ihrer App, wenn Sie sie in der Firebase-Konsole einrichten.
      2. Öffnen Sie in der Firebase-Konsole den Abschnitt Auth. Aktivieren Sie auf dem Tab Anmeldemethode den Anbieter Apple. Geben Sie die Die Dienst-ID, die Sie im vorherigen Abschnitt erstellt haben. Geben Sie außerdem im Abschnitt „OAuth-Code-Ablauf konfigurieren“ Ihre Apple-Team-ID sowie den privaten Schlüssel und die Schlüssel-ID an, die Sie im vorherigen Abschnitt erstellt haben.

Anforderungen von Apple für anonymisierte Daten einhalten

Mit „Über Apple anmelden“ können Nutzer ihre Daten anonymisieren, einschließlich der E-Mail-Adresse. Nutzer, die diese Option auswählen, haben E-Mail-Adressen mit der Domain privaterelay.appleid.com. Wann? Sie die Funktion „Über Apple anmelden“ in Ihrer App verwenden, müssen Sie alle anwendbaren von Apple im Zusammenhang mit diesen anonymisierten IDs.

Dazu gehört auch, dass Sie alle erforderlichen Nutzereinwilligungen einholen, bevor Sie alle direkt identifizierbaren personenbezogenen Daten mit einem anonymisierten Apple ID. Bei Verwendung von Firebase Authentication kann dies Folgendes umfassen: Aktionen:

  • E-Mail-Adressen mit einer anonymisierten Apple-ID verknüpfen oder umgekehrt
  • Telefonnummer mit einer anonymisierten Apple-ID verknüpfen und umgekehrt
  • Verknüpfen Sie nicht anonyme Anmeldedaten (Facebook, Google usw.) mit einem und umgekehrt.

Die obige Liste ist nicht vollständig. Mit dem Apple Developer Program Lizenzvereinbarung im Bereich „Mitgliedschaft“ deines Entwicklerkontos, ob Ihre App die Anforderungen von Apple erfüllt.

Auf die Klasse Firebase.Auth.FirebaseAuth zugreifen

Die Klasse FirebaseAuth ist das Gateway für alle API-Aufrufe. Sie können über FirebaseAuth.DefaultInstance darauf zugreifen.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Anmeldevorgang mit dem Firebase SDK abwickeln

Der Anmeldevorgang für Apple-Geräte variiert je nach Apple- und Android-Plattform.

Auf Apple-Plattformen

  1. Installieren Sie ein Drittanbieter-Plug-in, um die Generierung von Apple-Anmelde-Nonces und -Tokens zu verarbeiten, z. B. das Asset Storage Package für die Anmeldung über Apple von Unity. Möglicherweise müssen Sie den Code ändern, um den generierten zufälligen Nonce-String im Rohstring-Zustand für die Verwendung in Firebase-Vorgängen zu übergeben. Speichern Sie dazu eine Kopie, bevor die SHA256-Digest-Form des Nonces erstellt wird.

  2. Verwenden Sie den resultierenden Token-String und den Roh-Nonce, um ein Firebase-Anmeldedatenobjekt zu erstellen und sich in Firebase anzumelden.

    Firebase.Auth.Credential credential =
        Firebase.Auth.OAuthProvider.GetCredential("apple.com", appleIdToken, rawNonce, null);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

  3. Dasselbe Muster kann mit ReauthenticateAsync verwendet werden, um aktuelle Anmeldedaten für vertrauliche Vorgänge abzurufen, für die eine aktuelle Anmeldung erforderlich ist. Weitere Informationen finden Sie unter Nutzer verwalten:

  4. Wenn Sie die Anmeldung über Apple auf Apple-Plattformen verknüpfen, wird möglicherweise die Fehlermeldung angezeigt, dass ein vorhandenes Firebase-Konto bereits mit dem Apple-Konto verknüpft ist. In diesem Fall wird anstelle des Standardwerts Firebase.FirebaseException die Ausnahme Firebase.Auth.FirebaseAccountLinkException geworfen. In diesem Fall Ausnahme enthält die Property UserInfo.UpdatedCredential die, sofern gültig, zur Anmeldung des mit Apple verknüpften Nutzers über FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync. Durch die aktualisierten Anmeldedaten muss kein neues Apple Sign-In-Token mit einem Nonce für die Anmeldung generiert werden.

    auth.CurrentUser.LinkWithCredentialAsync(
      Firebase.Auth.OAuthProvider.GetCredential("apple.com", idToken, rawNonce, null))
        .ContinueWithOnMainThread( task => {
          if (task.IsCompletedSuccessfully) {
            // Link Success
          } else {
            if (task.Exception != null) {
              foreach (Exception exception in task.Exception.Flatten().InnerExceptions) {
                Firebase.Auth.FirebaseAccountLinkException firebaseEx =
                  exception as Firebase.Auth.FirebaseAccountLinkException;
                if (firebaseEx != null && firebaseEx.UserInfo.UpdatedCredential.IsValid()) {
                  // Attempt to sign in with the updated credential.
                  auth.SignInAndRetrieveDataWithCredentialAsync(firebaseEx.UserInfo.UpdatedCredential).
                    ContinueWithOnMainThread( authResultTask => {
                      // Handle Auth result.
                    });
                } else {
                  Debug.Log("Link with Apple failed:" + firebaseEx );
                }
              } // end for loop
            }
          }
        });

Auf Android-Geräten

Authentifizieren Sie unter Android Ihre Nutzer bei Firebase, indem Sie ein webbasiertes die allgemeine OAuth-Anmeldung in Ihrer App mithilfe des Firebase SDK für die Anmeldevorgang beenden.

So führen Sie den Anmeldevorgang mit dem Firebase SDK aus:

  1. Erstellen Sie eine Instanz von FederatedOAuthProviderData, die mit der für Apple geeigneten Anbieter-ID konfiguriert ist.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    
    providerData.ProviderId = "apple.com";
    
  2. Optional: Geben Sie zusätzliche OAuth 2.0-Bereiche an, die Sie zusätzlich zum Standardbereich vom Authentifizierungsanbieter anfordern möchten.

    providerData.Scopes = new List<string>();
    providerData.Scopes.Add("email");
    providerData.Scopes.Add("name");
    
  3. Optional: Wenn Sie den Anmeldebildschirm von Apple in einer anderen Sprache als Englisch anzeigen lassen möchten, legen Sie den Parameter locale fest. Eine Liste der unterstützten Sprachen finden Sie in der Dokumentation zu „Über Apple anmelden“.

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    
  4. Nachdem Sie die Anbieterdaten konfiguriert haben, erstellen Sie einen FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider =
      new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. Authentifizieren Sie sich bei Firebase mithilfe des Auth-Anbieterobjekts. Im Gegensatz zu anderen FirebaseAuth-Vorgängen wird hier die Kontrolle über die Benutzeroberfläche übernommen, indem eine Webansicht eingeblendet wird, in der der Nutzer seine Anmeldedaten eingeben kann.

    Rufen Sie signInWithProvider auf, um den Anmeldevorgang zu starten:

    auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("SignInWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("SignInWithProviderAsync encountered an error: " +
              task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User signed in successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  6. Dasselbe Muster kann mit ReauthenticateWithProvider verwendet werden, um aktuelle Anmeldedaten für vertrauliche Vorgänge abzurufen, für die eine aktuelle Anmeldung erforderlich ist.

    user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("ReauthenticateWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError(
            "ReauthenticateWithProviderAsync encountered an error: " +
                task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  7. Außerdem können Sie LinkWithCredentialAsync() verwenden, um verschiedene Identitätsanbieter zu verknüpfen in bestehenden Konten.

    Bei Apple müssen Sie die ausdrückliche Einwilligung der Nutzer einholen, bevor Sie ihre Apple-Konten mit anderen Daten zu verknüpfen.

    Wenn Sie beispielsweise ein Facebook-Konto mit dem aktuellen Firebase-Konto verknüpfen möchten, verwenden Sie das Zugriffstoken, das Sie bei der Anmeldung des Nutzers bei Facebook erhalten haben:

    // Initialize a Facebook credential with a Facebook access token.
    
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(facebook_token);
    
    // Assuming the current user is an Apple user linking a Facebook provider.
    user.LinkWithCredentialAsync(credential)
        .ContinueWithOnMainThread( task => {
          if (task.IsCanceled) {
              Debug.LogError("LinkWithCredentialAsync was canceled.");
              return;
          }
          if (task.IsFaulted) {
            Debug.LogError("LinkWithCredentialAsync encountered an error: "
                           + task.Exception);
              return;
          }
    
          Firebase.Auth.AuthResult result = task.Result;
          Firebase.Auth.FirebaseUser user = result.User;
          Debug.LogFormat("User linked successfully: {0} ({1})",
              user.DisplayName, user.UserId);
        });
    

Über Apple Notizen anmelden

Anders als andere von Firebase Auth unterstützte Anbieter stellt Apple keine Foto-URL bereit.

Wenn der Nutzer seine E-Mail-Adresse nicht mit der App teilen möchte, stellt Apple eine eindeutige E-Mail-Adresse für diesen Nutzer bereit (im Format xyz@privaterelay.appleid.com), die an Ihre App weitergegeben wird. Wenn Sie den privaten E-Mail-Relay-Dienst konfiguriert haben, leitet Apple alle an die anonymisierte Adresse gesendeten E-Mails an die reale E-Mail-Adresse des Nutzers weiter.

Apple gibt Nutzerinformationen wie den Anzeigenamen nur an Apps weiter, wenn sich ein Nutzer das erste Mal anmeldet. Normalerweise speichert Firebase den Anzeigenamen wenn sich ein Nutzer bei der ersten Anmeldung über Apple anmeldet. Dies können Sie auth.CurrentUser.DisplayName Wenn Sie jedoch zuvor Apple verwendet haben, um einen Nutzer ohne Anmeldung in der App verwendet Apple Firebase, gibt Apple den Anzeigenamen des Nutzers nicht an Firebase weiter.

Nächste Schritte

Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, d. h. Nutzername und Passwort, Telefonnummer oder Informationen des Authentifizierungsanbieters. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps in Ihrem Projekt zu identifizieren, unabhängig davon, wie er sich anmeldet.

In Ihren Apps können Sie die grundlegenden Profilinformationen des Nutzers aus dem Firebase.Auth.FirebaseUser-Objekt abrufen. Weitere Informationen finden Sie unter Nutzer verwalten.

In der Firebase Realtime Database und den Cloud Storage-Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Authentifizierungsvariable abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.