Procéder à la connexion des utilisateurs avec Apple sur Android

Ce document explique comment utiliser Identity Platform pour ajouter Se connecter avec Apple à votre application Android.

Avant de commencer

Configurer votre application avec Apple

Sur le site Apple Developer :

  1. Suivez les étapes de l'article Configure Sign in with Apple for the web. Par exemple :

    1. Enregistrez une URL de renvoi, semblable à celle-ci :

      https://project-id.firebaseapp.com/__/auth/handler
      
    2. Hébergez temporairement un fichier à l'URL suivante pour valider votre domaine :

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

    Notez également votre ID de service et votre ID d'équipe Apple. Vous en aurez besoin dans la section suivante.

  2. Utilisez une clé privée Apple pour créer une connexion. Vous aurez besoin de la clé et de son ID dans la section suivante.

  3. Si vous utilisez Identity Platform pour envoyer des e-mails à vos utilisateurs, configurez votre projet avec le service de relais de messagerie privé d'Apple à l'aide de l'adresse e-mail suivante:

    noreply@project-id.firebaseapp.com
    

    Vous pouvez également utiliser un modèle d'e-mail personnalisé, si votre application en possède un.

Conformité avec les exigences de données anonymes d'Apple

Apple offre aux utilisateurs la possibilité d'anonymiser leurs données, y compris leur adresse e-mail. Apple attribue aux utilisateurs qui sélectionnent cette option une adresse e-mail masquée contenant le domaine privaterelay.appleid.com.

Votre application doit respecter le règlement pour les développeurs ou les conditions d'utilisation d'Apple concernant les identifiants Apple anonymes. Cela inclut l'obtention de l'autorisation de l'utilisateur avant d'associer des informations personnelles à un identifiant Apple anonyme. Les actions impliquant des informations personnelles incluent, sans s'y limiter :

  • Associer une adresse e-mail à un identifiant Apple anonyme, ou inversement
  • Associer un numéro de téléphone à un identifiant Apple anonyme, ou inversement
  • Associer un identifiant de réseau social non anonyme, tel que Facebook ou Google, à un identifiant Apple anonyme, ou inversement

Pour plus d'informations, reportez-vous au Contrat de licence du programme Apple Developer associé à votre compte de développeur Apple.

Configurer Apple en tant que fournisseur

Pour configurer Apple en tant que fournisseur d'identité :

  1. Accédez à la page Fournisseurs d'identité dans la console Google Cloud.

    Accéder à la page "Fournisseurs d'identité"

  2. Cliquez sur Ajouter un fournisseur.

  3. Dans la liste, sélectionnez Apple.

  4. Sous Plate-forme, sélectionnez Android.

  5. Saisissez votre ID de service, votre ID d'équipe Apple, votre ID de clé et votre clé privée.

  6. Enregistrez les domaines de votre application en cliquant sur Ajouter un domaine sous Domaines autorisés. À des fins de développement, localhost est déjà activé par défaut.

  7. Sous Configurer votre application, cliquez sur Android. Copiez l'extrait dans le code de votre application pour initialiser le SDK client Identity Platform.

  8. Cliquez sur Enregistrer.

Connecter des utilisateurs avec le SDK client

  1. Créez une instance de l'objet de fournisseur OAuthProvider en utilisant l'ID apple.com :

    Java

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

    Kotlin

    val provider = OAuthProvider.newBuilder("apple.com")
    
  2. Facultatif : Ajoutez des champs d'application OAuth. Les champs d'application spécifient les données que vous demandez à Apple. Des données plus sensibles peuvent nécessiter des champs d'application spécifiques. Par défaut, lorsque l'option Un compte par adresse e-mail est activée, Identity Platform demande les champs d'application email et name.

    Java

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

    Kotlin

    provider.setScopes(arrayOf("email", "name"))
    
  3. Facultatif : Localisez le flux d'authentification. Vous pouvez spécifier un langage ou utiliser le langage par défaut de l'appareil :

    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. Procédez à la connexion de l'utilisateur avec Identity Platform.

    1. Pour vérifier si une réponse est déjà présente, appelez la méthode 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")
      }
      

      La connexion place votre activité en arrière-plan, ce qui signifie que le système peut la récupérer pendant le flux d'authentification. Vérifier si un résultat est déjà présent empêche l'utilisateur de se connecter deux fois.

    2. Si aucun résultat n'est en attente, appelez 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)
        }
      

Contrairement à de nombreux autres fournisseurs d'identité, Apple ne fournit pas d'URL de photo.

Si un utilisateur choisit de ne pas partager son véritable adresse e-mail avec votre application, Apple provisionne une adresse e-mail unique à la place. Cette adresse e-mail se présente sous la forme suivante : xyz@privaterelay.appleid.com. Si vous avez configuré le service de relais de messagerie privé, Apple transfère les e-mails envoyés à l'adresse anonyme à l'adresse e-mail réelle de l'utilisateur.

Apple ne partage des informations utilisateur, telles que les noms à afficher, qu'avec les applications la première fois qu'un utilisateur se connecte. Dans la plupart des cas, Identity Platform stocke ces données, ce qui vous permet de les récupérer à l'aide de firebase.auth().currentUser.displayName lors des sessions futures. Toutefois, si vous avez autorisé les utilisateurs à se connecter à votre application à l'aide d'Apple avant l'intégration à Identity Platform, les informations sur l'utilisateur ne sont pas disponibles.

Étape suivante