Accesso degli utenti con Apple su Android

Questo documento mostra come utilizzare Identity Platform per aggiungere Sign in with Apple alla tua app per Android.

Prima di iniziare

  • Attiva Identity Platform e crea un'app per Android di base. Per scoprire come attivare Identity Platform ed eseguire l'accesso, consulta la guida rapida.

  • Partecipa all'Apple Developer Program.

Configurare l'app con Apple

Sul sito Apple Developer:

  1. Segui i passaggi descritti in Configurare Sign in with Apple per il web. Sono inclusi:

    1. Registrazione di un URL di reindirizzamento, che ha il seguente aspetto:

      https://project-id.firebaseapp.com/__/auth/handler
      
    2. Hosting temporaneo di un file al seguente URL 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 ID team Apple , che ti serviranno nella sezione successiva.

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

  3. Se utilizzi Identity Platform per inviare email ai tuoi utenti, configura il progetto con il servizio di inoltro email privato di Apple utilizzando la seguente email:

    noreply@project-id.firebaseapp.com
    

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

Rispetto dei requisiti di Apple per i dati anonimizzati

Apple offre agli utenti la possibilità di anonimizzare i propri dati, incluso l'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 le norme o i termini per gli sviluppatori applicabili di Apple relativi agli ID Apple anonimizzati. Ciò include l'ottenimento del consenso dell'utente prima di associare informazioni che consentono l'identificazione personale (PII) a un ID Apple anonimizzato. Le azioni che coinvolgono le PII includono, a titolo esemplificativo:

  • Collegamento di un indirizzo email a un ID Apple anonimizzato o viceversa.
  • Collegamento di un numero di telefono a un ID Apple anonimizzato o viceversa.
  • Collegamento di una credenziale social non anonima, ad esempio 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.

Configurare Apple come provider

Per configurare Apple come provider di identità:

  1. Vai alla pagina Provider di Identity Platform nella Google Cloud console.

    Vai alla pagina Provider di Identity Platform

  2. Fai clic su Aggiungi un provider.

  3. Seleziona Apple dall'elenco.

  4. In Piattaforma, seleziona Android.

  5. Inserisci ID servizi, ID team Apple, ID chiave e Chiave privata.

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

  7. In Configura l'applicazione, fai clic su Android. Copia lo snippet nel codice dell'app per inizializzare l'SDK client di Identity Platform.

  8. Fai clic su Salva.

Accesso degli utenti con l'SDK client

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

    Java

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("apple.com");
    

    Kotlin

    val provider = OAuthProvider.newBuilder("apple.com")
    
  2. Facoltativo: aggiungi ambiti OAuth. Gli ambiti specificano i dati che stai richiedendo ad Apple. I dati più sensibili potrebbero richiedere ambiti specifici. Per impostazione predefinita, quando l'opzione Un account per indirizzo email è abilitata, Identity Platform richiede gli ambiti email e name.

    Java

    List<String> scopes =
        new ArrayList<String>() {
          {
            add("email");
            add("name");
          }
        };
    provider.setScopes(scopes);
    

    Kotlin

    provider.setScopes(arrayOf("email", "name"))
    
  3. Facoltativo: localizza il flusso di autenticazione. Puoi specificare una lingua o utilizzare la lingua predefinita del dispositivo:

    Java

    // Localize the Apple authentication screen in French.
    provider.addCustomParameter("locale", "fr");
    

    Kotlin

    // Localize the Apple authentication screen in French.
    provider.addCustomParameter("locale", "fr");
    
  4. Consenti all'utente di accedere con Identity Platform.

    1. Verifica se è già presente una risposta chiamando startActivityForSignInWithProvider():

      Java

      mAuth = FirebaseAuth.getInstance();
      Task<AuthResult> pending = mAuth.getPendingAuthResult();
      if (pending != null) {
          pending.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                  Log.d(TAG, "checkPending:onSuccess:" + authResult);
                  // Get the user profile with authResult.getUser() and
                  // authResult.getAdditionalUserInfo(), and the ID
                  // token from Apple with authResult.getCredential().
              }
          }).addOnFailureListener(new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                  Log.w(TAG, "checkPending:onFailure", e);
              }
          });
      } else {
          Log.d(TAG, "pending: null");
      }
      

      Kotlin

      val pending = auth.pendingAuthResult
      if (pending != null) {
          pending.addOnSuccessListener { authResult ->
              Log.d(TAG, "checkPending:onSuccess:$authResult")
              // Get the user profile with authResult.getUser() and
              // authResult.getAdditionalUserInfo(), and the ID
              // token from Apple with authResult.getCredential().
          }.addOnFailureListener { e ->
              Log.w(TAG, "checkPending:onFailure", e)
          }
      } else {
          Log.d(TAG, "pending: null")
      }
      

      L'accesso mette la tua attività in background, il che significa che il sistema può recuperarla durante il flusso di autenticazione. Verificare se è già presente un risultato impedisce all'utente di dover eseguire l'accesso due volte.

    2. Se non è presente alcun risultato in attesa, chiama startActivityForSignInWithProvider():

      Java

      mAuth.startActivityForSignInWithProvider(this, provider.build())
          .addOnSuccessListener(
                  new OnSuccessListener<AuthResult>() {
                      @Override
                      public void onSuccess(AuthResult authResult) {
                          // Sign-in successful!
                          Log.d(TAG, "activitySignIn:onSuccess:" + authResult.getUser());
                          FirebaseUser user = authResult.getUser();
                          // ...
                      }
                  })
          .addOnFailureListener(
                  new OnFailureListener() {
                      @Override
                      public void onFailure(@NonNull Exception e) {
                          Log.w(TAG, "activitySignIn:onFailure", e);
                      }
                  });
      

      Kotlin

      auth.startActivityForSignInWithProvider(this, provider.build())
        .addOnSuccessListener { authResult ->
            // Sign-in successful!
            Log.d(TAG, "activitySignIn:onSuccess:${authResult.user}")
            val user = authResult.user
            // ...
        }
        .addOnFailureListener { e ->
            Log.w(TAG, "activitySignIn:onFailure", e)
        }
      

A differenza di molti altri provider di identità, Apple non fornisce un URL della foto.

Se un utente sceglie di non condividere il suo indirizzo email reale con la tua app, Apple fornisce un indirizzo email univoco che l'utente può condividere. Questa email ha il formato xyz@privaterelay.appleid.com. Se hai configurato il servizio di inoltro email privato, Apple inoltra le email inviate all'indirizzo anonimizzato all'indirizzo email reale dell'utente.

Apple condivide le informazioni utente, come i nomi visualizzati, con le app solo la prima volta che un utente esegue l'accesso. Nella maggior parte dei casi, Identity Platform archivia 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 dell'integrazione con Identity Platform, le informazioni utente non sono disponibili.

Passaggi successivi