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.
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
Suivez ces étapes pour effectuer l'association depuis votre plate-forme:
- L'utilisateur doit activer ou désactiver un déclencheur d'association dans votre application mobile.
- L'utilisateur sélectionne le compte Google à associer.
- L'utilisateur sélectionne un compte Google existant à associer sur l'appareil ou se connecte avec un nouveau compte.
- Un écran de consentement hébergé par Google s'affiche. L'utilisateur doit accepter de continuer ou d'annuler pour interrompre le processus d'association.
- Votre écran de consentement s'affiche. L'utilisateur doit accepter de continuer ou d'annuler pour interrompre le processus d'association.
- Le lien est établi entre le compte de l'utilisateur, sur votre service et son compte Google.
Figure 1 : Créer une association depuis le flux de plate-forme
Conditions requises
Pour implémenter une association à partir de votre plate-forme, vous avez besoin des éléments suivants:
- Une application Android.
- Posséder, gérer et maintenir un serveur OAuth 2.0 compatible avec le flux avec code d'autorisation OAuth 2.0.
Préparation
Avant de suivre les étapes ci-dessous, vous devez avoir suivi la procédure d'inscription pour l'association de comptes.
Configurer votre environnement de développement.
Installez les derniers services Google Play sur votre hôte de développement:
- Ouvrez Android SDK Manager.
Sous SDK Tools, recherchez Google Play services.
Si l'état de ces packages n'est pas "Installé", sélectionnez-les les deux et cliquez sur Installer les packages.
Configurer votre application
Dans le fichier
build.gradle
au niveau du projet, incluez le dépôt Maven de Google dans vos sectionsbuildscript
etallprojects
.buildscript { repositories { google() } } allprojects { repositories { google() } }
Ajoutez les dépendances de l'API "Link with 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:21.0.0' }
Ajouter la prise en charge de Link depuis votre plate-forme
L'association depuis votre flux de plate-forme entraîne l'enregistrement d'un jeton d'accès, fourni par votre service, par Google. Vous devez obtenir le consentement de l'utilisateur avant de renvoyer le jeton.
Suivez les étapes ci-dessous pour obtenir le consentement de l'utilisateur et renvoyer un jeton de code d'autorisation via le SDK des services Google Play.
Créez un PendingIntent qui peut lancer votre activité de consentement. Le consentement est lancé par l'API Play Services. Vous devez fournir un
PendingIntent
(appeléconsentPendingIntent
pour plus de clarté) lorsque l'API est 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();
Créer l'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 supposons que les méthodes
onConsentAccpeted()
etonConsentRejectedOrCanceled()
sont appelées si l'utilisateur accepte ou refuse/annule votre consentement, respectivement.Créez une requête pour enregistrer le jeton et, parmi d'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)); ```
La procédure ci-dessus invite l'utilisateur à donner son consentement et renvoie un code d'autorisation à Google.
Bonnes pratiques
Votre application doit indiquer l'état du lien à l'utilisateur via un bouton, un bouton d'activation ou un élément visuel similaire.
Figure 1 : Exemple d'image d'état d'un lien
Vous devez informer l'utilisateur lorsque l'association a réussi, par exemple en affichant un toast, en déclenchant un changement d'état d'activation ou en le redirigeant vers une page distincte de confirmation du lien.
Envisagez d'inviter les utilisateurs de votre application à associer leurs comptes, idéalement en vous basant sur des signaux forts indiquant que cette association profiterait à ces utilisateurs.
Une fois l'association effectuée, donnez aux utilisateurs un exemple de ce qu'ils doivent faire avec le compte associé. Par exemple, si vous venez d'associer un service de streaming musical, demandez à l'Assistant Google de mettre de la musique.
Permettez aux utilisateurs de gérer leurs comptes associés et de les dissocier. Orientez-le vers la page de gestion de ses comptes Google associés (https://myaccount.google.com/accountlinking).
Reference
Documentation de référence sur l'API d'authentification Android