Accesso degli utenti con Apple

Questo documento mostra come utilizzare Identity Platform per aggiungere Accedi con Apple alla tua app web.

Prima di iniziare

Configurare l'app con Apple

Sul sito Apple Developer:

  1. Segui la procedura descritta in Configurare Accedi con Apple per il web. tra cui:

    1. Registra un URL di ritorno, simile a questo:

      https://project-id.firebaseapp.com/__/auth/handler
      
    2. Ospitando temporaneamente un file all'URL seguente per verificare il tuo dominio:

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

    Inoltre, prendi nota del tuo ID servizi e del tuo ID team Apple, poiché ti serviranno nella sezione successiva.

  2. Utilizza una chiave privata Apple per creare un accesso. Avrai bisogno della chiave e del relativo ID nella sezione successiva.

  3. Se utilizzi Identity Platform per inviare email agli utenti, configurare il progetto con il servizio di inoltro email privato di Apple utilizzando il seguente indirizzo email:

    noreply@project-id.firebaseapp.com
    

    Puoi anche usare un modello di email personalizzato, se la tua app ne ha uno.

Conformità ai requisiti di Apple relativi ai dati anonimizzati

Apple offre agli utenti la possibilità di anonimizzare i propri dati, ad esempio: il proprio indirizzo email. Apple assegna agli utenti che selezionano questa opzione un indirizzo email offuscato con il dominio privaterelay.appleid.com.

La tua app deve rispettare tutte le norme per gli sviluppatori o i termini applicabili di Apple sugli ID Apple anonimizzati. Ciò include l'ottenimento del consenso degli utenti prima associazione di informazioni che consentono l'identificazione personale (PII) a un indirizzo ID Apple. Le azioni che coinvolgono PII includono, a titolo esemplificativo:

  • Collegare un indirizzo email a un ID Apple anonimo o viceversa.
  • Collegamento di un numero di telefono a un Apple ID anonimizzato o viceversa
  • Collegamento di una credenziale social non anonima, come Facebook o Google, a un ID Apple anonimizzato o viceversa.

Per ulteriori informazioni, consulta il Contratto di licenza del programma per sviluppatori Apple per il tuo account sviluppatore Apple.

Configurazione di Apple come provider

Per configurare Apple come provider di identità:

  1. Vai alla pagina Provider di identità nella console Google Cloud.

    Vai alla pagina Provider di identità

  2. Fai clic su Aggiungi un provider.

  3. Seleziona Mela dall'elenco.

  4. In Piattaforma, seleziona Web.

  5. Inserisci il tuo ID servizi, l'ID team Apple, l'ID chiave e la chiave privata.

  6. Registra i domini dell'app facendo clic su Aggiungi dominio in Domini autorizzati. Per scopi di sviluppo, localhost è già attivato per impostazione predefinita.

  7. In Configura la tua applicazione, fai clic su Dettagli di configurazione. Copia il nel codice dell'app per inizializzare Identity Platform SDK client.

  8. Fai clic su Salva.

Accesso degli utenti con l'SDK client

Per consentire l'accesso a un utente:

  1. Crea un'istanza dell'oggetto provider OAuthProvider utilizzando il metodo ID apple.com:

    Versione web 9

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

    Versione web 8

    var provider = new firebase.auth.OAuthProvider('apple.com');
  2. Facoltativo:aggiungi ambiti OAuth. Gli ambiti specificano quali dati sei una richiesta da Apple. Per dati più sensibili potrebbero essere necessari ambiti. Per impostazione predefinita, quando è attiva l'opzione Un account per indirizzo email, Identity Platform richiede gli ambiti email e name.

    Versione web 9

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

    Versione web 8

    provider.addScope('email');
    provider.addScope('name');
  3. (Facoltativo) Localizza il flusso di autenticazione. Puoi specificare una lingua, o utilizza la lingua predefinita del dispositivo. Consulta le Accedi con la documentazione di Apple per i paesi supportati.

    Versione web 9

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

    Versione web 8

    provider.setCustomParameters({
      // Localize the Apple authentication screen in French.
      locale: 'fr'
    });
  4. Utilizza l'oggetto provider per far accedere l'utente. Puoi aprire una finestra popup o reindirizzare la pagina corrente. Il reindirizzamento è più facile per gli utenti su dispositivi mobili.

    Per visualizzare un popup, chiama signInWithPopup():

    Versione web 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);
    
        // ...
      });

    Versione web 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;
    
        // ...
      });

    Per reindirizzare la pagina, devi prima chiamare signInWithRedirect():

    Segui le best practice quando utilizzi signInWithRedirect, linkWithRedirect o reauthenticateWithRedirect.

    Versione web 9

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

    Versione web 8

    firebase.auth().signInWithRedirect(provider);

    Quindi, chiama getRedirectResult() per recuperare il token Apple quando apri carica:

    Versione web 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);
    
        // ...
      });

    Versione web 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;
    
        // ...
      });

    Qui puoi anche individuare e gestire gli errori. Per un elenco di errori codici, consulta le Riferimento API.

A differenza di molti altri provider di identità, Apple non fornisce l'URL delle foto.

Se un utente sceglie di non condividere il proprio indirizzo email reale con l'app, Apple esegue il provisioning un indirizzo email univoco che l'utente possa condividere. L'email assume il formato xyz@privaterelay.appleid.com. Se hai configurato l'inoltro di email private servizio, Apple inoltra le email inviate all'indirizzo anonimo all'indirizzo .

Apple condivide le informazioni degli utenti, ad esempio i nomi visualizzati, con le app solo la prima volta che un utente accede. Nella maggior parte dei casi, Identity Platform memorizza questi dati, che puoi recuperare utilizzando firebase.auth().currentUser.displayName durante le sessioni future. Tuttavia, se hai consentito agli utenti di accedere alla tua app utilizzando Apple prima di eseguire l'integrazione con Identity Platform, le informazioni utente non sono disponibili.

Passaggi successivi