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.

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:

  1. L'utente farà clic/attiva/disattiva un attivatore di collegamento 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 oppure accede con un nuovo account.
  3. 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.
  4. 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.
  5. 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:

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:

  1. Apri Android SDK Manager.
di Gemini Advanced.
  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.2.0'
    }
    

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.

  1. 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 come 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 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() e onConsentRejectedOrCanceled() vengano chiamati rispettivamente se l'utente accetta o rifiuta/annulla il tuo consenso.

  3. 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.

Riferimento

Documentazione di riferimento dell'API Android auth