Mit Apple und Unity authentifizieren

Sie können Ihren Nutzern die Authentifizierung mit Firebase über ihre Apple-ID ermöglichen, indem Sie das Firebase SDK verwenden, um den End-to-End-OAuth 2.0-Anmeldevorgang durchzuführen.

Hinweis

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

Am Apple-Programm für Entwickler teilnehmen

„Über Apple anmelden“ kann nur von Mitgliedern des Apple-Programms für Entwickler konfiguriert werden.

Über Apple anmelden konfigurieren

„Mit Apple anmelden“ muss in Ihrem Firebase-Projekt aktiviert und richtig konfiguriert sein. Die Apple Developer-Konfiguration variiert je nach Android- und Apple-Plattform. Folgen Sie der Anleitung im Abschnitt „Mit Apple anmelden konfigurieren“ der Leitfäden für iOS+ und/oder Android, bevor Sie fortfahren.

Apple als Anmeldeanbieter aktivieren

  1. Öffnen Sie in der Firebase-Konsole den Bereich Auth (Authentifizierung). Aktivieren Sie auf dem Tab Anmeldemethode den Anbieter Apple.
  2. Konfigurieren Sie die Anbietereinstellungen für „Mit Apple anmelden“:
    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 für Android-Geräte:
      1. Fügen Sie Ihrem Android-Projekt Firebase hinzu. Registrieren Sie die SHA-1-Signatur Ihrer App, wenn Sie Ihre App in der Firebase-Konsole einrichten.
      2. Öffnen Sie in der Firebase-Konsole den Bereich Auth (Authentifizierung). Aktivieren Sie auf dem Tab Anmeldemethode den Anbieter Apple. Geben Sie die Dienst-ID an, die Sie im vorherigen Abschnitt erstellt haben. Geben Sie außerdem im Abschnitt zur Konfiguration des OAuth-Codeflusses 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 „Mit Apple anmelden“ haben Nutzer die Möglichkeit, ihre Daten, einschließlich ihrer E-Mail-Adresse, bei der Anmeldung zu anonymisieren. Nutzer, die diese Option auswählen, haben E-Mail-Adressen mit der Domain privaterelay.appleid.com. Wenn Sie „Mit Apple anmelden“ in Ihrer App verwenden, müssen Sie alle anwendbaren Entwicklerrichtlinien oder ‑bedingungen von Apple bezüglich dieser anonymisierten Apple-IDs einhalten.

Außerdem müssen Sie die erforderliche Einwilligung des Nutzers einholen, bevor Sie direkt identifizierbare personenbezogene Daten mit einer anonymisierten Apple-ID verknüpfen. Wenn Sie die Firebase-Authentifizierung verwenden, kann dies die folgenden Aktionen umfassen:

  • Eine E‑Mail-Adresse mit einer anonymisierten Apple‑ID verknüpfen und umgekehrt
  • Telefonnummer mit einer anonymisierten Apple‑ID verknüpfen und umgekehrt
  • Nicht-anonyme Anmeldedaten für soziale Medien (Facebook, Google usw.) mit einer anonymisierten Apple-ID verknüpfen und umgekehrt

Die obige Liste ist nicht vollständig. In der Lizenzvereinbarung des Apple-Entwicklerprogramms im Mitgliedschaftsbereich Ihres Entwicklerkontos finden Sie Informationen dazu, ob Ihre App die Anforderungen von Apple erfüllt.

Auf die Klasse Firebase.Auth.FirebaseAuth zugreifen

Die FirebaseAuth-Klasse ist das Gateway für alle API-Aufrufe. Sie ist über FirebaseAuth.DefaultInstance zugänglich.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Anmeldevorgang mit dem Firebase SDK abwickeln

Der Anmeldevorgang über Apple variiert je nach Apple- und Android-Plattform.

Auf Apple-Plattformen

  1. Installieren Sie ein Drittanbieter-Plug-in, um die Nonce und das Token für die Anmeldung über Apple zu generieren, z. B. das Unity-Paket „Sign In With Apple Asset Storage“. 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. Das bedeutet, dass Sie eine Kopie davon speichern müssen, bevor die SHA256-Digest-Form der Nonce erstellt wird.

  2. Verwenden Sie den resultierenden Tokenstring und den Raw-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 neue 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 sich auf Apple-Plattformen mit „Mit Apple anmelden“ verknüpfen, kann es zu einem Fehler kommen, dass ein vorhandenes Firebase-Konto bereits mit dem Apple-Konto verknüpft ist. In diesem Fall wird anstelle der Standard-Firebase.FirebaseException eine Firebase.Auth.FirebaseAccountLinkException ausgelöst. In diesem Fall enthält die Ausnahme eine UserInfo.UpdatedCredential-Property, die, sofern sie gültig ist, verwendet werden kann, um den mit Apple verknüpften Nutzer über FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync anzumelden. Mit den aktualisierten Anmeldedaten ist es nicht mehr erforderlich, für den Anmeldevorgang ein neues Apple-Log-in-Token mit Nonce zu generieren.

    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 Ihre Nutzer auf Android mit Firebase, indem Sie die webbasierte generische OAuth-Anmeldung in Ihre App einbinden und das Firebase SDK verwenden, um den End-to-End-Anmeldevorgang durchzuführen.

So handhaben Sie den Anmeldevorgang mit dem Firebase SDK:

  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 über die Standardbereiche hinausgehen und die Sie 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 möchten, legen Sie den Parameter locale fest. Eine Liste der unterstützten Sprachen finden Sie in der Dokumentation zu „Mit Apple anmelden“.

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    
  4. Nachdem Sie die Daten Ihres Anbieters konfiguriert haben, können Sie damit einen FederatedOAuthProvider erstellen.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider =
      new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. Authentifizieren Sie sich mit Firebase über das Auth-Anbieterobjekt. Im Gegensatz zu anderen FirebaseAuth-Vorgängen wird dadurch die Steuerung Ihrer 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 neue 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. Mit LinkWithCredentialAsync() können Sie verschiedene Identitätsanbieter mit bestehenden Konten verknüpfen.

    Hinweis: Apple setzt voraus, dass Sie die ausdrückliche Einwilligung der Nutzer einholen, bevor Sie ihre Apple-Konten mit anderen Daten verknüpfen.

    Wenn Sie beispielsweise ein Facebook-Konto mit dem aktuellen Firebase-Konto verknüpfen möchten, verwenden Sie das Zugriffstoken, das Sie beim Anmelden 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);
        });
    

Mit 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 dann an Apps weiter, wenn sich ein Nutzer zum ersten Mal anmeldet. Normalerweise speichert Firebase den Anzeigenamen, wenn sich ein Nutzer zum ersten Mal mit Apple anmeldet. Sie können ihn mit auth.CurrentUser.DisplayName abrufen. Wenn Sie Apple jedoch zuvor verwendet haben, um einen Nutzer ohne Firebase in der App anzumelden, stellt Apple Firebase den Anzeigenamen des Nutzers nicht zur Verfügung.

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 in Ihrem Projekt zu identifizieren, unabhängig davon, wie sich der Nutzer 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 Ihren Firebase Realtime Database- und Cloud Storage-Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der auth-Variablen abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.