Nutzer mit Apple anmelden

In diesem Dokument wird gezeigt, wie Sie mithilfe von Identity Platform Mit Apple anmelden zu Ihrer Webanwendung hinzufügen.

Hinweis

Anwendung mit Apple konfigurieren

Auf der Website für Apple-Entwickler:

  1. Führen Sie die Schritte unter Mit Apple im Web anmelden aus. Dazu zählen:

    1. Registrieren Sie eine Return-URL wie beispielsweise die folgende:

      https://project-id.firebaseapp.com/__/auth/handler
      
    2. Hosten Sie vorübergehend eine Datei unter der folgenden URL, um Ihre Domain zu bestätigen:

      https://project-id.firebaseapp.com/.well-known/apple-developer-domain-association.txt
      

    Notieren Sie sich außerdem Ihre Dienst-ID und Ihre Apple-Team-ID. Sie benötigen diese im nächsten Abschnitt.

  2. Mit einem privaten Apple-Schlüssel eine Anmeldung erstellen Sie benötigen diesen Schlüssel und seine ID im nächsten Abschnitt.

  3. Wenn Sie zum Senden von E-Mails an Ihre Nutzer Identity Platform verwenden, konfigurieren Sie Ihr Projekt mit dem privaten E-Mail-Relay-Dienst von Apple mithilfe der folgenden E-Mail-Adresse:

    noreply@project-id.firebaseapp.com
    

    Sie können auch eine benutzerdefinierte E-Mail-Vorlage nutzen, sofern eine solche für Ihre Anwendung vorhanden ist.

Anforderungen von Apple für anonymisierte Daten einhalten

Apple bietet Nutzern die Möglichkeit, ihre Daten, einschließlich ihrer E-Mail-Adresse, zu anonymisieren. Apple weist Nutzern, die diese Option auswählen, eine verschleierte E-Mail-Adresse mit der Domain privaterelay.appleid.com zu.

Ihre Anwendung muss alle geltenden Entwicklerrichtlinien oder -bedingungen von Apple bezüglich anonymisierter Apple-IDs einhalten. Außerdem muss die Einwilligung des Nutzers eingeholt werden, bevor personenbezogene Daten mit einer anonymisierten Apple-ID verknüpft werden. Beispiele für Aktionen mit personenbezogenen Daten:

  • 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 wie Facebook oder Google mit einer anonymisierten Apple-ID verknüpfen und umgekehrt

Weitere Informationen finden Sie in der Lizenzvereinbarung des Apple-Entwicklerprogramms für Ihr Apple-Entwicklerkonto.

Apple als Anbieter konfigurieren

So konfigurieren Sie Apple als Identitätsanbieter:

  1. Rufen Sie in der Google Cloud Console die Seite Identitätsanbieter auf.

    Zur Seite "Identitätsanbieter"

  2. Klicken Sie auf Anbieter hinzufügen.

  3. Wählen Sie in der Liste Apple aus.

  4. Wählen Sie unter Plattform die Option Web aus.

  5. Geben Sie Ihre Dienst-ID, Ihre Apple-Team-ID, Ihre Schlüssel-ID und Ihren privaten Schlüssel ein.

  6. Klicken Sie unter Autorisierte Domains auf Domain hinzufügen, um die Domains Ihrer Anwendung zu registrieren. Für Entwicklungszwecke ist localhost bereits standardmäßig aktiviert.

  7. Klicken Sie unter Anwendung konfigurieren auf Einrichtungsdetails. Kopieren Sie das Snippet in den Code Ihrer Anwendung, um das Identity Platform Client SDK zu initialisieren.

  8. Klicken Sie auf Speichern.

Nutzer mit dem Client SDK anmelden

So melden Sie einen Nutzer an:

  1. Erstellen Sie eine Instanz des OAuthProvider-Anbieterobjekts mit der ID apple.com:

    Webversion 9

    import { OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('apple.com');

    Webversion 8

    var provider = new firebase.auth.OAuthProvider('apple.com');
  2. Optional: Fügen Sie OAuth-Bereiche hinzu. Die Bereiche legen fest, welche Daten Sie von Apple anfordern. Für sensiblere Daten sind möglicherweise spezielle Bereiche erforderlich. Wenn Ein Konto pro E-Mail-Adresse aktiviert ist, fordert Identity Platform die Bereiche email und name standardmäßig an.

    Webversion 9

    provider.addScope('email');
    provider.addScope('name');

    Webversion 8

    provider.addScope('email');
    provider.addScope('name');
  3. Optional: Lokalisieren Sie den Authentifizierungsablauf. Sie können eine Sprache angeben oder die Standardsprache des Geräts verwenden. Eine Liste der unterstützten Sprachen finden Sie in der Dokumentation zu „Über Apple anmelden“.

    Webversion 9

    provider.setCustomParameters({
      // Localize the Apple authentication screen in French.
      locale: 'fr'
    });

    Webversion 8

    provider.setCustomParameters({
      // Localize the Apple authentication screen in French.
      locale: 'fr'
    });
  4. Melden Sie den Nutzer mithilfe des Anbieterobjekts an. Sie können entweder ein Pop-up-Fenster öffnen oder die aktuelle Seite weiterleiten. Für Nutzer von Mobilgeräten ist die Weiterleitung vereinfacht.

    Rufen Sie signInWithPopup() auf, um ein Pop-up-Fenster einzublenden:

    Webversion 9

    import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    signInWithPopup(auth, provider)
      .then((result) => {
        // The signed-in user info.
        const user = result.user;
    
        // Apple credential
        const credential = OAuthProvider.credentialFromResult(result);
        const accessToken = credential.accessToken;
        const idToken = credential.idToken;
    
        // IdP data available using getAdditionalUserInfo(result)
        // ...
      })
      .catch((error) => {
        // Handle Errors here.
        const errorCode = error.code;
        const errorMessage = error.message;
        // The email of the user's account used.
        const email = error.customData.email;
        // The credential that was used.
        const credential = OAuthProvider.credentialFromError(error);
    
        // ...
      });

    Webversion 8

    firebase
      .auth()
      .signInWithPopup(provider)
      .then((result) => {
        /** @type {firebase.auth.OAuthCredential} */
        var credential = result.credential;
    
        // The signed-in user info.
        var user = result.user;
    
        // You can also get the Apple OAuth Access and ID Tokens.
        var accessToken = credential.accessToken;
        var idToken = credential.idToken;
    
        // IdP data available using getAdditionalUserInfo(result)
      // ...
      })
      .catch((error) => {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        // The email of the user's account used.
        var email = error.email;
        // The firebase.auth.AuthCredential type that was used.
        var credential = error.credential;
    
        // ...
      });

    Rufen Sie zum Weiterleiten der Seite zuerst signInWithRedirect() auf:

    Beachten Sie die Best Practices, wenn Sie signInWithRedirect, linkWithRedirect oder reauthenticateWithRedirect verwenden.

    Webversion 9

    import { getAuth, signInWithRedirect } from "firebase/auth";
    
    const auth = getAuth();
    signInWithRedirect(auth, provider);

    Webversion 8

    firebase.auth().signInWithRedirect(provider);

    Rufen Sie dann getRedirectResult() auf, um das Apple-Token abzurufen, wenn Ihre Seite geladen wird:

    Webversion 9

    import { getAuth, getRedirectResult, OAuthProvider } from "firebase/auth";
    
    // Result from Redirect auth flow.
    const auth = getAuth();
    getRedirectResult(auth)
      .then((result) => {
        const credential = OAuthProvider.credentialFromResult(result);
        if (credential) {
          // You can also get the Apple OAuth Access and ID Tokens.
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
        }
        // The signed-in user info.
        const user = result.user;
      })
      .catch((error) => {
        // Handle Errors here.
        const errorCode = error.code;
        const errorMessage = error.message;
        // The email of the user's account used.
        const email = error.customData.email;
        // The credential that was used.
        const credential = OAuthProvider.credentialFromError(error);
    
        // ...
      });

    Webversion 8

    // Result from Redirect auth flow.
    firebase
      .auth()
      .getRedirectResult()
      .then((result) => {
        if (result.credential) {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
    
          // You can get the Apple OAuth Access and ID Tokens.
          var accessToken = credential.accessToken;
          var idToken = credential.idToken;
    
          // IdP data available in result.additionalUserInfo.profile.
          // ...
        }
        // The signed-in user info.
        var user = result.user;
      })
      .catch((error) => {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        // The email of the user's account used.
        var email = error.email;
        // The firebase.auth.AuthCredential type that was used.
        var credential = error.credential;
    
        // ...
      });

    Hier können Sie auch Fehler abfangen und behandeln. Eine Liste der Fehlercodes findest du in der API-Referenz.

Im Gegensatz zu vielen anderen Identitätsanbietern stellt Apple keine Foto-URL bereit.

Wenn ein Nutzer seine reale E-Mail-Adresse nicht mit Ihrer Anwendung teilen möchte, stellt Apple eine eindeutige E-Mail-Adresse für diesen Nutzer bereit. Diese E-Mail hat das Format xyz@privaterelay.appleid.com. 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 Anzeigenamen nur dann an Anwendungen weiter, wenn sich ein Nutzer zum ersten Mal anmeldet. In den meisten Fällen werden diese Daten von Identity Platform gespeichert, damit Sie sie bei zukünftigen Sitzungen mithilfe von firebase.auth().currentUser.displayName abrufen können. Wenn Sie Nutzern jedoch erlauben, sich mit Apple bei Ihrer Anwendung anzumelden, bevor Sie sie in Identity Platform eingebunden haben, sind keine Nutzerinformationen verfügbar.

Nächste Schritte