Avvia il collegamento dell'Account Google direttamente dalla tua piattaforma.

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.

Questo approccio migliora il rendimento del collegamento dell'account coinvolgendo gli utenti nel contesto familiare dell'app anziché in una conversazione con l'assistente. Può essere integrato nelle operazioni preliminari degli utenti, nelle impostazioni e in altre piattaforme per le app, creando opportunità per la scoperta e il coinvolgimento della tua azione dell'Assistente Google. Ad esempio, dopo il collegamento, potresti offrirgli di indirizzare l'utente direttamente alla tua azione.

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

Per eseguire il collegamento dalla tua piattaforma, segui questi passaggi:

  1. L'utente farà clic su un attivatore di collegamento o lo attiverà / disattiverà nella tua app mobile.
  2. L'utente seleziona l'Account Google da collegare.
    1. L'utente seleziona un Account Google esistente sul dispositivo da collegare o accede con un nuovo account
  3. All'utente vengono mostrate schermate per il consenso ospitate da Google e deve accettare di continuare o annullare per interrompere la procedura di collegamento.
  4. L'utente visualizza la schermata per il consenso e deve accettare di continuare o annullare per interrompere la procedura di collegamento.
  5. Il collegamento viene stabilito tra l'account dell'utente sul tuo servizio e il suo Account Google.

Figura 1. Eseguire il collegamento dal flusso della piattaforma

Requisiti

Per implementare il collegamento dalla tua piattaforma, devi disporre di quanto segue:

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

Installa la versione più recente di Google Play Services sull'host di sviluppo:

  1. Apri Android SDK Manager.
  1. In Strumenti SDK, individua Google Play Services.

  2. Se lo stato di questi pacchetti non è Installato, selezionali entrambi e fai clic su Installa pacchetti.

Configura la tua app

  1. Nel file build.gradle a livello di progetto, includi il repository Maven di Google sia nelle sezioni buildscript che allprojects.

    buildscript {
        repositories {
            google()
        }
    }
    
    allprojects {
        repositories {
            google()
        }
    }
    
  2. Aggiungi le dipendenze per l'API "Collega con 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.3.0'
    }
    

Il flusso Collega dalla tua piattaforma comporterà il salvataggio da parte di Google di un token di accesso fornito dal tuo servizio. Il consenso deve essere ricevuto 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 autenticazione tramite l'SDK Google Play Services.

  1. Crea un PendingIntent che possa avviare l'attività di consenso. Il consenso viene avviato dall'API Play Services. Dovrai fornire un PendingIntent (che verrà chiamato consentPendingIntent per chiarezza) quando viene chiamata l'API

    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. Crea l'attività corrispondente per gestire l'intent 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();
        }
     }
    
    

    Supponiamo che i metodi onConsentAccpeted() e onConsentRejectedOrCanceled() vengano chiamati se l'utente accetta o rifiuta/annulla il consenso, rispettivamente.

  3. Crea una richiesta per il salvataggio del token e, tra gli altri parametri di configurazione, passa il valore PendingIntent creato nel passaggio 1 qui sopra.

    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 dell'utente e restituiscono un codice di autorizzazione a Google.

Best practice

  • L'app deve indicare lo stato del collegamento all'utente tramite un pulsante, un pulsante di attivazione/disattivazione o un elemento visivo simile.

    Figura 1. Immagine di esempio dello stato del collegamento

  • Devi informare l'utente dopo un collegamento riuscito, ad esempio mostrando un messaggio popup, attivando una modifica dello stato di attivazione/disattivazione o reindirizzando l'utente a una pagina di conferma del collegamento separata.

  • Ti consigliamo di chiedere agli utenti in-app di collegare gli account, idealmente in base a indicatori forti che indicano che il collegamento sarebbe vantaggioso per questi utenti.

  • Dopo aver completato il collegamento, devi fornire agli utenti un esempio di cosa fare con l'account collegato, ad esempio, se hai appena collegato un servizio di streaming musicale, chiedi all'Assistente Google di riprodurre musica.

  • Consenti agli utenti di gestire i propri account collegati, inclusa la possibilità di scollegarli. Invitalo a visitare la pagina di gestione degli Account collegati di Google, ovvero https://myaccount.google.com/accountlinking.

Riferimento

Documentazione di riferimento dell'API Android Auth