Il collegamento dell'account può essere completato direttamente nell'app per dispositivi mobili, consentendo agli utenti di collegare il proprio account sul tuo servizio al proprio Account Google. Il link stabilito concede a Google l'accesso ai dati che l'utente acconsente alla condivisione.
Ecco alcuni vantaggi per gli utenti:
- Gli utenti possono avviare e completare la procedura di collegamento dell'account nella tua app, un ambiente che già conoscono.
- Gli utenti non richiedono credenziali di accesso perché sono già state autenticate sul dispositivo e nella tua app per dispositivi mobili.
I vantaggi per gli sviluppatori sono:
- Stabilisci dove promuovere e avviare il collegamento dell'account nella tua app per dispositivi mobili, ad esempio nelle impostazioni utente, negli interstitial o dopo che un utente accede alla tua app per dispositivi mobili. L'aggiunta di più punti di accesso per avviare il collegamento dell'account consente di rendere più visibile il collegamento dell'account , con conseguente aumento del coinvolgimento e del numero di account collegati.
- Aumento del tasso di conversione poiché gli utenti possono completare il processo di collegamento in meno passaggi rispetto al flusso OAuth basato sul Web standard.
- Bassa richiesta di assistenza tecnica per implementare Link dalla tua piattaforma (Android), in quanto questa procedura sfrutta l'implementazione OAuth2.0 esistente, presupponendo che tu ne abbia già una implementata.
- Riduzione dei tassi di abbandono perché gli utenti non devono reinserire le credenziali di accesso e sono in grado di completare la procedura in meno passaggi. I tassi di abbandono possono raggiungere l'80% nei flussi in cui gli utenti devono richiamare e inserire le proprie credenziali di accesso.
Come funziona
Il collegamento dalla tua piattaforma viene completato nei seguenti passaggi:
- L'utente farà clic/attiva/disattiva un attivatore di collegamento nella tua app mobile.
- L'utente seleziona l'Account Google da collegare.
- L'utente seleziona un Account Google esistente sul dispositivo da collegare oppure accede con un nuovo account.
- L'utente visualizza una schermata per il consenso ospitata da Google e deve accettare di continuare o annullare l'operazione per interrompere la procedura di collegamento.
- All'utente viene mostrata la tua schermata per il consenso e deve accettare di continuare o annullare la procedura per interrompere la procedura di collegamento.
- Il Collegamento viene stabilito tra l'account dell'utente sul tuo servizio e il suo Account Google.
Figura 1. Link dal tuo flusso della piattaforma
Requisiti
Per implementare Link dalla tua piattaforma, devi disporre di quanto segue:
- Un'app per Android.
- Possedere, gestire e gestire un server OAuth 2.0 che supporti il flusso del codice di autorizzazione OAuth 2.0.
Configurazione
Prima di procedere con i passaggi riportati di seguito, devi aver completato la procedura di registrazione per il collegamento degli account.
Configura l'ambiente di sviluppo
Scarica la versione più recente di Google Play Services sull'host di sviluppo:
- Apri Android SDK Manager.
In Strumenti SDK, individua Google Play Services.
Se lo stato di questi pacchetti non è installato, selezionali entrambi e fai clic su Installa pacchetti.
Configura la tua app
Nel file
build.gradle
a livello di progetto, includi il Repository Maven di Google in entrambe le sezionibuildscript
eallprojects
.buildscript { repositories { google() } } allprojects { repositories { google() } }
Aggiungi le dipendenze per l'API "Link with Google" al file gradle a livello di app del tuo modulo, che in genere è
app/build.gradle
:dependencies { implementation 'com.google.android.gms:play-services-auth:21.2.0' }
Aggiungi il supporto per Link dalla tua piattaforma
Il flusso Link dalla tua Piattaforma comporterà il salvataggio da parte di Google di un token di accesso fornito dal tuo servizio. È necessario ricevere il consenso prima di restituire il token per l'utente.
Segui i passaggi riportati di seguito per ottenere il consenso dell'utente e restituire un token di codice di autorizzazione tramite l'SDK Google Play Services.
Crea un PendingIntent che possa avviare la tua attività di consenso. Il consenso viene lanciato dall'API Play Services. Dovrai fornire un
PendingIntent
(che verrà indicato comeconsentPendingIntent
per chiarezza) quando l'API verrà chiamataKotlin
// 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();
Crea un'attività corrispondente per gestire l'intento di consenso
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(); } }
Partiamo dal presupposto che i metodi
onConsentAccpeted()
eonConsentRejectedOrCanceled()
vengano chiamati rispettivamente se l'utente accetta o rifiuta/annulla il tuo consenso.Crea una richiesta per salvare il token e, tra gli altri parametri di configurazione, passa il valore
PendingIntent
creato nel passaggio 1 precedente.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)); ```
I passaggi precedenti richiedono il consenso all'utente e restituiscono un codice di autorizzazione a Google.
Best practice
L'app deve indicare all'utente lo stato del link tramite un pulsante, un'opzione di attivazione/disattivazione o un elemento visivo simile.
Figura 1. Esempio di immagine dello stato del link
Devi informare l'utente dopo che il collegamento è riuscito, ad esempio mostrare un avviso popup, attivare la modifica dello stato di attivazione/disattivazione o reindirizzare l'utente a una pagina di conferma del collegamento.
Dovresti prendere in considerazione l'idea di chiedere agli utenti in-app di collegare gli account, idealmente in base a segnali chiari che il collegamento potrebbe essere utile per questi utenti.
Dopo aver effettuato il collegamento, dovresti fornire agli utenti un esempio di cosa fare con l'account collegato, ad es. se hai appena collegato un servizio di streaming musicale, chiedi all'Assistente Google di farti ascoltare un po' di musica.
Consentire agli utenti di gestire i propri account collegati, inclusa l'opzione per scollegarli. Indirizzali alla pagina di gestione degli account collegati di Google, all'indirizzo https://myaccount.google.com/accountlinking.