Authentifizieren Sie sich mit Apple und Unity

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

Bevor Sie beginnen

Um Benutzer mit Apple anzumelden, konfigurieren Sie zunächst „Mit Apple anmelden“ auf der Entwicklerseite von Apple und aktivieren Sie dann Apple als Anmeldeanbieter für Ihr Firebase-Projekt.

Treten Sie dem Apple Developer Program bei

„Mit Apple anmelden“ kann nur von Mitgliedern des Apple Developer Program konfiguriert werden.

Konfigurieren Sie die Anmeldung mit Apple

Die Apple-Anmeldung muss in Ihrem Firebase-Projekt aktiviert und ordnungsgemäß konfiguriert sein. Die Apple Developer-Konfiguration variiert je nach Android- und Apple-Plattform. Bitte befolgen Sie den Abschnitt „Anmeldung mit Apple konfigurieren“ in den iOS+- und/oder Android- Anleitungen, bevor Sie fortfahren.

Aktivieren Sie Apple als Anmeldeanbieter

  1. Öffnen Sie in der Firebase-Konsole den Abschnitt „Auth“ . Aktivieren Sie auf der Registerkarte Anmeldemethode den Apple- Anbieter.
  2. Konfigurieren Sie die Einstellungen des Apple-Anmeldeanbieters:
    1. Wenn Sie Ihre App nur auf Apple-Plattformen bereitstellen, können Sie die Felder Service-ID, Apple-Team-ID, privater Schlüssel und Schlüssel-ID leer lassen.
    2. Für Support auf Android-Geräten:
      1. Fügen Sie Firebase zu Ihrem Android-Projekt hinzu . Achten Sie darauf, die SHA-1-Signatur Ihrer App zu registrieren, wenn Sie Ihre App in der Firebase-Konsole einrichten.
      2. Öffnen Sie in der Firebase-Konsole den Abschnitt „Auth“ . Aktivieren Sie auf der Registerkarte Anmeldemethode den Apple- Anbieter. Geben Sie die Service-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.

Erfüllen Sie die Anforderungen von Apple an anonymisierte Daten

„Mit Apple anmelden“ bietet Benutzern die Möglichkeit, ihre Daten, einschließlich ihrer E-Mail-Adresse, bei der Anmeldung zu anonymisieren. Benutzer, die diese Option wählen, verfügen über E-Mail-Adressen mit der Domäne privaterelay.appleid.com . Wenn Sie „Mit Apple anmelden“ in Ihrer App verwenden, müssen Sie alle geltenden Entwicklerrichtlinien oder Bedingungen von Apple in Bezug auf diese anonymisierten Apple-IDs einhalten.

Dazu gehört auch die Einholung der erforderlichen Einwilligung des Nutzers, bevor Sie direkt identifizierende personenbezogene Daten mit einer anonymisierten Apple-ID verknüpfen. Bei Verwendung der Firebase-Authentifizierung kann dies die folgenden Aktionen umfassen:

  • Verknüpfen Sie eine E-Mail-Adresse mit einer anonymisierten Apple-ID oder umgekehrt.
  • Verknüpfen Sie eine Telefonnummer mit einer anonymisierten Apple-ID oder umgekehrt
  • Verknüpfen Sie nicht anonyme soziale Anmeldeinformationen (Facebook, Google usw.) mit einer anonymisierten Apple-ID oder umgekehrt.

Die obige Liste ist nicht vollständig. Sehen Sie sich die Apple Developer Program-Lizenzvereinbarung im Abschnitt „Mitgliedschaft“ Ihres Entwicklerkontos an, um sicherzustellen, dass Ihre App die Anforderungen von Apple erfüllt.

Greifen Sie auf die Firebase.Auth.FirebaseAuth -Klasse zu

Die FirebaseAuth Klasse ist das Gateway für alle API-Aufrufe. Der Zugriff erfolgt über FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Behandeln Sie den Anmeldevorgang mit dem Firebase SDK

Der Vorgang zur Anmeldung bei Apple variiert je nach Apple- und Android-Plattform.

Auf Apple-Plattformen

  1. Installieren Sie ein Plugin eines Drittanbieters, um die Apple-Anmelde-Nonce und die Token-Generierung zu verwalten, z. B. das Sign-In-With-Apple-Asset-Storage-Paket von Unity . Möglicherweise müssen Sie den Code ändern, um den generierten zufälligen Nonce-String in seinem Rohstring-Zustand für die Verwendung in Firebase-Vorgängen bereitzustellen (d. h. eine Kopie davon zu speichern, bevor die SHA256-Digest-Form des Nonce erstellt wird).

  2. Verwenden Sie die resultierende Token-Zeichenfolge und die Roh-Nonce, um Firebase-Anmeldeinformationen zu erstellen und sich bei 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. Das gleiche Muster kann mit ReauthenticateAsync verwendet werden, mit dem neue Anmeldeinformationen für vertrauliche Vorgänge abgerufen werden können, die eine kürzliche Anmeldung erfordern. Weitere Informationen finden Sie unter Benutzer verwalten .

  4. Bei der Verknüpfung mit Apple Sign In auf Apple-Plattformen kann es zu einer Fehlermeldung kommen, dass ein vorhandenes Firebase-Konto bereits mit dem Apple-Konto verknüpft wurde. In diesem Fall wird eine Firebase.Auth.FirebaseAccountLinkException anstelle der standardmäßigen Firebase.FirebaseException ausgelöst. In diesem Fall umfasst die Ausnahme eine UserInfo.UpdatedCredential Eigenschaft, die, sofern gültig, zum Anmelden des mit Apple verknüpften Benutzers über FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync verwendet werden kann. Durch die aktualisierten Anmeldeinformationen entfällt die Notwendigkeit, für den Anmeldevorgang ein neues Apple-Anmeldetoken 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

Authentifizieren Sie Ihre Benutzer unter Android mit Firebase, indem Sie die webbasierte generische OAuth-Anmeldung mithilfe des Firebase SDK in Ihre App integrieren, um den End-to-End-Anmeldevorgang durchzuführen.

Führen Sie die folgenden Schritte aus, um den Anmeldevorgang mit dem Firebase SDK abzuwickeln:

  1. Erstellen Sie eine Instanz eines FederatedOAuthProviderData , das 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 über den Standard hinaus zusätzliche OAuth 2.0-Bereiche an, 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. Informationen zu den unterstützten Gebietsschemas finden Sie in der Dokumentation „Mit Apple anmelden“ .

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    
  4. Sobald Ihre Providerdaten konfiguriert wurden, verwenden Sie diese, um einen FederatedOAuthProvider zu erstellen.

    // 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-Provider-Objekts. Beachten Sie, dass dies im Gegensatz zu anderen FirebaseAuth-Vorgängen die Kontrolle über Ihre Benutzeroberfläche übernimmt, indem eine Webansicht angezeigt wird, in der der Benutzer seine Anmeldeinformationen eingeben kann.

    Um den Anmeldevorgang zu starten, rufen Sie signInWithProvider auf:

    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. Das gleiche Muster kann mit ReauthenticateWithProvider verwendet werden, mit dem neue Anmeldeinformationen für vertrauliche Vorgänge abgerufen werden können, die eine kürzliche Anmeldung erfordern.

    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. Und Sie können LinkWithCredentialAsync() verwenden, um verschiedene Identitätsanbieter mit vorhandenen Konten zu verknüpfen.

    Beachten Sie, dass Apple verlangt, dass Sie die ausdrückliche Zustimmung der Benutzer einholen, bevor Sie deren Apple-Konten mit anderen Daten verknüpfen.

    Um beispielsweise ein Facebook-Konto mit dem aktuellen Firebase-Konto zu verknüpfen, verwenden Sie das Zugriffstoken, das Sie durch die Anmeldung des Benutzers 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);
        });
    

Melden Sie sich mit Apple Notes an

Im Gegensatz zu anderen von Firebase Auth unterstützten Anbietern stellt Apple keine Foto-URL bereit.

Wenn sich der Benutzer außerdem dafür entscheidet, seine E-Mail-Adresse nicht mit der App zu teilen, stellt Apple für diesen Benutzer eine eindeutige E-Mail-Adresse (in der Form xyz@privaterelay.appleid.com ) bereit, die es mit Ihrer App teilt. Wenn Sie den privaten E-Mail-Relay-Dienst konfiguriert haben, leitet Apple an die anonymisierte Adresse gesendete E-Mails an die echte E-Mail-Adresse des Benutzers weiter.

Apple gibt Benutzerinformationen wie den Anzeigenamen nur dann an Apps weiter, wenn sich ein Benutzer zum ersten Mal anmeldet. Normalerweise speichert Firebase den Anzeigenamen, wenn sich ein Benutzer zum ersten Mal bei Apple anmeldet, den Sie mit auth.CurrentUser.DisplayName erhalten können. Wenn Sie jedoch zuvor Apple verwendet haben, um einen Benutzer bei der App anzumelden, ohne Firebase zu verwenden, stellt Apple Firebase den Anzeigenamen des Benutzers nicht zur Verfügung.

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. Siehe Benutzer verwalten .

In Ihren Firebase-Echtzeitdatenbank- und Cloud-Speicher-Sicherheitsregeln können Sie die eindeutige Benutzer-ID des angemeldeten Benutzers aus der Authentifizierungsvariablen abrufen und damit steuern, auf welche Daten ein Benutzer zugreifen kann.