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

Il collegamento dalla Piattaforma viene completato nei seguenti passaggi:

  1. L'utente farà clic o attiverà un attivatore di collegamento nella tua app mobile.
  2. L'utente seleziona l'Account Google da collegare.
    1. L'utente seleziona sul dispositivo un Account Google esistente da collegare oppure accede con un nuovo account.
  3. All'utente vengono mostrate schermate per il consenso ospitate da Google e deve accettare di continuare o annullare l'operazione per interrompere la procedura di collegamento.
  4. L'utente visualizza la tua schermata per il consenso e deve accettare per continuare o annullare 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, è necessario quanto segue:

Configurazione

Prima di procedere con i passaggi riportati di seguito, devi aver completato la procedura di registrazione relativa al collegamento dell'account.

Configura l'ambiente di sviluppo

Scarica la versione più recente di Google Play Services sul tuo 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 in entrambe le sezioni buildscript e allprojects.

    buildscript {
        repositories {
            google()
        }
    }
    
    allprojects {
        repositories {
            google()
        }
    }
    
  2. 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.0.0'
    }
    

Il collegamento dal flusso della piattaforma comporterà il salvataggio di un token di accesso, fornito dal tuo servizio, da parte di Google. Il consenso deve essere ricevuto prima di restituire il token per l'utente.

Segui questi passaggi per ottenere il consenso dell'utente e restituire un token del codice di autorizzazione tramite l'SDK Google Play Services.

  1. Creare un PendingIntent che possa avviare la tua attività di consenso. Il consenso viene lanciato dall'API Play Services. Dovrai fornire un PendingIntent (che verrà denominato consentPendingIntent per chiarezza) quando l'API verrà chiamata

    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'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();
        }
     }
    
    

    Presumiamo che i metodi onConsentAccpeted() e onConsentRejectedOrCanceled() vengano richiamati se l'utente accetta o rifiuta/annulla il tuo consenso rispettivamente.

  3. Crea una richiesta per salvare il token e, tra gli altri parametri di configurazione, passa il 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 a un utente il consenso e restituisce un codice di autorizzazione a Google.

Best practice

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

    Figura 1. Immagine di stato del link di esempio

  • Dovresti informare l'utente dopo che un collegamento è riuscito, ad esempio mostrare un avviso popup, attivare una modifica dello stato di attivazione/disattivazione o reindirizzare l'utente a una pagina separata con collegamento riuscito.

  • Ti consigliamo di chiedere agli utenti in-app di collegare gli account, idealmente in base a forti indicatori che il collegamento potrebbe essere utile a questi utenti.

  • Dopo il collegamento, dovresti 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 farti ascoltare un po' di musica.

  • Consentire agli utenti di gestire gli account collegati, inclusa la possibilità di scollegarli. Indirizzare l'utente alla pagina di gestione degli Account Google collegati, ovvero https://myaccount.google.com/accountlinking.

Riferimento

Documentazione di riferimento per le API di autenticazione Android