Sie können Ihren Nutzern die Authentifizierung mit Firebase über ihre Apple-ID ermöglichen. Verwenden Sie dazu das Firebase SDK, um den vollständigen OAuth 2.0-Anmeldevorgang auszuführen.
Hinweis
Wenn Sie Nutzern die Anmeldung über Apple ermöglichen möchten, konfigurieren Sie zuerst „Über Apple anmelden“ auf der Apple-Entwicklerwebsite und aktivieren Sie dann Apple als Anmeldeanbieter für Ihr Firebase-Projekt.
Am Apple Developer Program teilnehmen
„Über Apple anmelden“ kann nur von Mitgliedern des Apple-Programms für Entwickler konfiguriert werden.
„Über Apple anmelden“ konfigurieren
„Über Apple anmelden“ muss in Ihrem Firebase-Projekt aktiviert und richtig konfiguriert sein. Die Apple-Entwicklerkonfiguration variiert je nach Android- und Apple-Plattform. Folgen Sie der Anleitung für iOS+ und/oder Android im Abschnitt „Über Apple anmelden konfigurieren“, bevor Sie fortfahren.Apple als Anmeldeanbieter aktivieren
- Wechseln Sie in der Firebase Console zu Security > Authentication.
- Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter Apple sign-in provider.
- Konfigurieren Sie die Einstellungen für den Anmeldeanbieter „Über Apple anmelden“:
- Apple: 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.
-
Android: Führen Sie die folgenden Schritte aus, um Android-Geräte zu unterstützen:
- Firebase zu Ihrem Android-Projekt hinzufügen.
-
Geben Sie den SHA-1-Fingerabdruck Ihrer App an, falls noch nicht geschehen.
-
Wechseln Sie in der Firebase Console zu den
Einstellungen > Tab Allgemein. - Scrollen Sie nach unten zur Karte Ihre Apps , wählen Sie Ihre Android-App aus und fügen Sie Ihren SHA-1-Fingerabdruck in das Feld SHA-Zertifikat-Fingerabdrücke ein.
Weitere Informationen zum Abrufen des SHA-Fingerabdrucks Ihrer App finden Sie unter Client authentifizieren.
-
Wechseln Sie in der Firebase Console zu den
-
Konfigurieren Sie die Einstellungen für den Anmeldeanbieter „Über Apple anmelden“:
- Wechseln Sie in der Firebase Console zu Sicherheit > Authentifizierung.
- Klicken Sie auf dem Tab Anmeldemethode auf den Anmeldeanbieter Apple.
- Geben Sie die Dienst-ID an, die Sie im vorherigen Abschnitt erstellt haben. Geben Sie im Konfigurationsbereich für den OAuth-Codeablauf außerdem 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
„Über Apple anmelden“ bietet Nutzern 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 „Über Apple anmelden“ in Ihrer App verwenden, müssen Sie alle geltenden Entwicklerrichtlinien oder ‑bedingungen von Apple bezüglich dieser anonymisierten Apple-IDs einhalten.
Dazu gehört, dass Sie die erforderliche Nutzereinwilligung einholen müssen, bevor Sie direkt identifizierbare personenbezogene Daten mit einer anonymisierten Apple-ID verknüpfen. Bei Verwendung von Firebase Authentication können folgende Aktionen erforderlich sein:
- 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. Beachten Sie die Lizenzvereinbarung des Apple Developer Program im Mitgliedschaftsbereich Ihres Entwicklerkontos, um sicherzustellen, dass 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 ist über FirebaseAuth.DefaultInstance zugänglich.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Anmeldevorgang mit dem Firebase SDK verarbeiten
Der Vorgang für die Anmeldung über Apple variiert je nach Apple- und Android-Plattform.
Auf Apple-Plattformen
Installieren Sie ein Drittanbieter-Plug-in, um die Nonce und das Token für die Apple-Anmeldung zu generieren , z. B. das Unity-Paket für die Asset-Speicherung für die Anmeldung über Apple. Möglicherweise müssen Sie den Code ändern, um die generierte zufällige Nonce-String in ihrem Rohstring-Zustand für die Verwendung in Firebase-Vorgängen zu speichern (d. h. eine Kopie davon zu speichern, bevor die SHA256-Digest-Form der Nonce erstellt wird).
Verwenden Sie den resultierenden Token-String und die Roh-Nonce, um Anmeldedaten für Firebase 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); });
Dasselbe Muster kann mit
ReauthenticateAsyncverwendet 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.Wenn Sie auf Apple-Plattformen eine Verknüpfung mit „Über Apple anmelden“ herstellen, kann ein Fehler auftreten, dass ein vorhandenes Firebase-Konto bereits mit dem Apple-Konto verknüpft ist. In diesem Fall wird anstelle der Standardausnahme
Firebase.FirebaseExceptioneineFirebase.Auth.FirebaseAccountLinkExceptionausgelöst. Die Ausnahme enthält in diesem Fall die EigenschaftUserInfo.UpdatedCredential, die, falls gültig, verwendet werden kann, um den mit Apple verknüpften Nutzer überFirebaseAuth.SignInAndRetrieveDataWithCredentialAsyncanzumelden. Die aktualisierten Anmeldedaten umgehen die Notwendigkeit, für den Anmeldevorgang ein neues Token für die Anmeldung über Apple mit einer 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-Geräten mit Firebase, indem Sie die webbasierte generische OAuth-Anmeldung in Ihre App einbinden. Verwenden Sie dazu das Firebase SDK, um den vollständigen Anmeldevorgang auszuführen.
So verarbeiten Sie den Anmeldevorgang mit dem Firebase SDK:
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";Optional:Geben Sie 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");Optional:Wenn Sie den Anmeldebildschirm von Apple in einer anderen Sprache als Englisch anzeigen möchten, legen Sie den Parameter
localefest. Eine Liste der unterstützten Gebietsschemas finden Sie in der Dokumentation zu „Über Apple anmelden“.providerData.CustomParameters = new Dictionary<string,string>; // Localize to French. providerData.CustomParameters.Add("language", "fr");Nachdem Sie Ihre Anbieterdaten konfiguriert haben, erstellen Sie damit einen FederatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods. Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider(); provider.SetProviderData(providerData);Authentifizieren Sie sich mit Firebase über das Auth-Anbieterobjekt. Im Gegensatz zu anderen FirebaseAuth-Vorgängen übernimmt dieser Vorgang die Steuerung der UI, indem eine Webansicht eingeblendet wird, in der der Nutzer seine Anmeldedaten eingeben kann.
Rufen Sie
signInWithProviderauf, 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); });Dasselbe Muster kann mit
ReauthenticateWithProviderverwendet 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); });Mit
LinkWithCredentialAsync()können Sie verschiedene Identitätsanbieter mit vorhandenen Konten verknüpfen.Apple verlangt, 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 durch die 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); });
Hinweise zur Anmeldung über Apple
Im Gegensatz zu anderen von Firebase Auth unterstützten Anbietern stellt Apple keine Foto-URL bereit.
Wenn der Nutzer seine E‑Mail-Adresse nicht für die App freigibt, 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 Anwendungen weiter, wenn sich ein Nutzer zum ersten Mal anmeldet. Normalerweise speichert Firebase den Anzeigenamen, wenn sich ein Nutzer zum ersten Mal über Apple anmeldet. Sie können ihn mit auth.CurrentUser.DisplayName abrufen.
Wenn Sie Apple jedoch zuvor verwendet haben, um einen Nutzer in der App anzumelden, ohne Firebase zu verwenden, stellt Apple Firebase den Anzeigenamen des Nutzers nicht zur Verfügung.
Nächste Schritte
Wenn sich ein neuer Nutzer zum ersten Mal anmeldet, wird ein Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, mit denen sich der Nutzer angemeldet hat (Nutzername und Passwort, Telefonnummer oder Informationen zum Authentifizierungsanbieter). Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps Ihres Projekts zu identifizieren, unabhängig davon, wie sich der Nutzer anmeldet.In Ihren Apps können Sie die grundlegenden Profilinformationen des Nutzers aus dem Objekt Firebase.Auth.FirebaseUser abrufen. Weitere Informationen finden Sie unter Nutzer verwalten.
In den Sicherheitsregeln für die Firebase Realtime Database und Cloud Storage können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen „auth“ abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.