Lancer l'association de comptes Google directement depuis votre plate-forme

Vous pouvez associer des comptes directement dans votre application mobile. Vos utilisateurs peuvent ainsi associer leur compte sur votre service avec leur compte Google. Le lien établi autorise Google à accéder aux données que l'utilisateur accepte de partager.

Cette approche améliore les performances de l'association de compte en engageant les utilisateurs dans le contexte familier de votre application plutôt que dans une conversation avec l'Assistant. Il peut être intégré à l'intégration des utilisateurs, aux paramètres et à d'autres surfaces d'application, ce qui permet de découvrir et d'utiliser votre action de l'Assistant Google. Par exemple, après l'association, vous pouvez proposer de rediriger l'utilisateur directement vers votre action.

Voici quelques-uns des avantages pour les utilisateurs:

  • Les utilisateurs peuvent démarrer et terminer le processus d'association de compte dans votre application, un environnement qu'ils connaissent déjà.
  • Les utilisateurs n'ont pas besoin d'identifiants de connexion, car ils ont déjà été authentifiés sur l'appareil et dans votre application mobile.

Avantages pour les développeurs:

  • Contrôlez où promouvoir et lancer l'association de comptes dans votre application mobile, par exemple dans les paramètres utilisateur, sur les interstitiels ou après la connexion d'un utilisateur à votre application mobile. L'ajout de plusieurs points d'entrée pour lancer l'association de comptes permet de rendre l'association de comptes plus visible. , ce qui a permis d'accroître l'engagement et le nombre de comptes associés.
  • Augmentation du taux de conversion à mesure que les utilisateurs réalisent le processus d'association en moins d'étapes que le flux OAuth standard basé sur le Web
  • L'implémentation de Link à partir de votre plate-forme (Android) nécessite très peu d'ingénierie, car ce flux exploite votre intégration OAuth2.0 existante, en supposant que vous en ayez déjà mis en œuvre une.
  • Réduction des taux d'abandon, car les utilisateurs n'ont pas besoin de saisir à nouveau leurs identifiants et sont en mesure de suivre le processus plus rapidement. Les taux d'abandon peuvent atteindre 80% pour les flux pour lesquels les utilisateurs sont invités à se souvenir de leurs identifiants de connexion et à les saisir.

Fonctionnement

Pour associer votre plate-forme, procédez comme suit :

  1. L'utilisateur clique sur un déclencheur d'association ou l'active dans votre application mobile.
  2. L'utilisateur sélectionne le compte Google à associer.
    1. L'utilisateur sélectionne un compte Google existant sur l'appareil à associer ou se connecte avec un nouveau compte.
  3. Un écran de consentement hébergé par Google s'affiche. L'utilisateur doit accepter pour continuer ou annuler pour arrêter le processus d'association.
  4. L'utilisateur voit votre écran de consentement et doit l'accepter pour continuer ou l'annuler pour arrêter le processus d'association.
  5. L'association est établie entre le compte de l'utilisateur sur votre service et son compte Google.

Figure 1 : Lien depuis votre flux de plate-forme

Conditions requises

Pour implémenter Link depuis votre plate-forme, vous avez besoin des éléments suivants :

Configuration

Avant de suivre les étapes ci-dessous, vous devez avoir terminé le processus d'enregistrement de l'association du compte.

Configurer votre environnement de développement.

Téléchargez les derniers services Google Play sur votre hôte de développement :

  1. Ouvrez le SDK Manager d'Android.
  1. Sous SDK Tools, recherchez services Google Play.

  2. Si l'état de ces packages n'est pas "Installé", sélectionnez-les tous les deux, puis cliquez sur Installer les packages.

Configurer votre application

  1. Dans votre fichier build.gradle au niveau du projet, ajoutez le dépôt Maven de Google aux sections buildscript et allprojects.

    buildscript {
        repositories {
            google()
        }
    }
    
    allprojects {
        repositories {
            google()
        }
    }
    
  2. Ajoutez les dépendances de l'API "Associer à Google" au fichier Gradle au niveau de l'application de votre module, qui est généralement app/build.gradle :

    dependencies {
      implementation 'com.google.android.gms:play-services-auth:22.0.0'
    }
    

Le flux d'association depuis votre plate-forme permet à Google d'enregistrer un jeton d'accès fourni par votre service. Le consentement doit être reçu avant de renvoyer le jeton pour l'utilisateur.

Suivez les étapes ci-dessous pour obtenir le consentement de l'utilisateur et renvoyer un jeton de code d'authentification via le SDK des services Google Play.

  1. Créez un PendingIntent capable de lancer votre activité de consentement. Le consentement est lancé par l'API des services Play. Vous devrez fournir un PendingIntent (qui sera appelé consentPendingIntent pour plus de clarté) lorsque l'API sera appelée.

    Kotlin

    // Build a PendingIntent that can launch the consent activity
    val consentPendingIntent = buildConsentPendingIntent()
    

    Java

    // Build a PendingIntent that can launch your consent activity
    PendingIntent consentPendingIntent =
              buildConsentPendingIntent();
    
  2. Créer une activité correspondante pour gérer l'intent de consentement

    Kotlin

      class ConsentActivity : AppCompatActivity
    
      private fun onConsentAccepted() {
          // Obtain a token (for simplicity, we’ll ignore the async nature
          // of the following call)
          val token = getToken()
          val intent = Intent()
                      .putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN,
                                token)
          setResult(Activity.RESULT_OK, intent)
          finish()
      }
    
      private fun onConsentRejectedOrCanceled() {
          setResult(Activity.RESULT_CANCELED)
          finish()
      }
    

    Java

      public class ConsentActivity extends AppCompatActivity {
        ...
        private void onConsentAccepted() {
          // Obtain a token (for simplicity, we’ll ignore the async nature of
          // the following call
          String token = getToken();
          Intent intent = new Intent();
          intent.putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN, token);
          setResult(Activity.RESULT_OK, intent);
          finish();
        }
    
        private void onConsentRejectedOrCanceled() {
          setResult(Activity.RESULT_CANCELED, null);
          finish();
        }
     }
    
    

    Nous partons du principe que les méthodes onConsentAccpeted() et onConsentRejectedOrCanceled() sont appelées si l'utilisateur accepte ou refuse/annule votre consentement, respectivement.

  3. Créez une requête pour enregistrer le jeton et, entre autres paramètres de configuration, transmettez le PendingIntent créé à l'étape 1 ci-dessus.

    Kotlin

      // Create an ActivityResultLauncher which registers a callback for the
      // Activity result contract
      val activityResultLauncher = registerForActivityResult(
        ActivityResultContracts.StartIntentSenderForResult())
        { result ->
          if (result.resultCode == RESULT_OK) {
            // Successfully finished the flow and saved the token
          } else {
            // Flow failed, for example the user may have canceled the flow
          }
        }
    
      // Build token save request
      val request = SaveAccountLinkingTokenRequest.builder()
        .setTokenType(SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE)
        .setConsentPendingIntent(consentPendingIntent)
        .setServiceId("service-id-of-and-defined-by-developer")
        //Set the scopes that the token is valid for on your platform
        .setScopes(scopes)
        .build()
    
       // Launch consent activity and retrieve token
       Identity.getCredentialSavingClient(this)
         .saveAccountLinkingToken(request)
         .addOnSuccessListener( saveAccountLinkingTokenResult -> {
            if (saveAccountLinkingTokenResult.hasResolution()) {
              val pendingIntent = saveAccountLinkingTokenResult
                                  .getPendingIntent()
              val intentSenderRequest = IntentSenderRequest
                                        .Builder(pendingIntent).build()
              activityResultLauncher.launch(intentSenderRequest)
            } else {
               // This should not happen, let’s log this
               Log.e(TAG, "Failed to save token");
            }
          })
          .addOnFailureListener(e -> Log.e(TAG, “Failed to save token”, e))
    

    Java

      // Create an ActivityResultLauncher which registers a callback for the
      // Activity result contract
      ActivityResultLauncher<IntentSenderRequest>
          activityResultLauncher =
          registerForActivityResult(new ActivityResultContracts
                                        .StartIntentSenderForResult(),
                                    result -> {
          if (result.getResultCode() == RESULT_OK) {
              // Successfully finished the flow and saved the token
          } else {
              // Flow failed, for example the user may have canceled the flow
          }
      });
    
     // Build token save request
     SaveAccountLinkingTokenRequest request =
        SaveAccountLinkingTokenRequest.builder()
            .setTokenType(
                SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE)
            .setConsentPendingIntent(consentPendingIntent)
            .setServiceId("service-id-of-and-defined-by-developer")
            //Set the scopes that the token is valid for on your platform
            .setScopes(scopes)
            .build();
    
      // Launch consent activity and retrieve token
      Identity.getCredentialSavingClient(this)
          .saveAccountLinkingToken(request)
          .addOnSuccessListener(
              saveAccountLinkingTokenResult -> {
                if (saveAccountLinkingTokenResult.hasResolution()) {
                  // Launch the resolution intent
                  PendingIntent pendingIntent =
                      saveAccountLinkingTokenResult.getPendingIntent();
                  IntentSenderRequest intentSenderRequest =
                      new IntentSenderRequest.Builder(pendingIntent).build();
                  activityResultLauncher.launch(intentSenderRequest);
                } else {
                  // This should not happen, let’s log this
                  Log.e(TAG, "Failed to save token");
                }
              })
          .addOnFailureListener(e -> Log.e(TAG, "Failed to save token", e));
      ```
    

Les étapes ci-dessus invitent l'utilisateur à donner son consentement et renvoient un code d'autorisation à Google.

Bonnes pratiques

  • Votre application doit indiquer l'état de l'association à l'utilisateur à l'aide d'un bouton, d'un bouton d'activation/de désactivation ou d'un élément visuel similaire.

    Figure 1 : Exemple d'image de l'état de l'association

  • Vous devez avertir l'utilisateur une fois l'association réussie (par exemple, en affichant un message toast, en déclenchant un changement d'état d'un bouton ou en redirigeant l'utilisateur vers une page distincte confirmant l'association).

  • Vous devriez envisager d'inviter les utilisateurs de l'application à associer leurs comptes, idéalement en vous basant sur des signaux forts indiquant que l'association leur serait bénéfique.

  • Une fois l'association effectuée, vous devez donner aux utilisateurs un exemple de ce qu'ils peuvent faire avec le compte associé. Par exemple, si vous venez d'associer un service de streaming musical, demandez à l'Assistant Google de diffuser de la musique.

  • Permettez aux utilisateurs de gérer leurs comptes associés, y compris de les dissocier. Dirigez-les vers la page de gestion de leurs comptes Google associés, à savoir https://myaccount.google.com/accountlinking.

Référence

Documentation de référence de l'API d'authentification Android