Inicie a vinculação da Conta do Google diretamente na sua plataforma.

A vinculação de contas pode ser concluída diretamente em seu aplicativo para dispositivos móveis, permitindo que seus usuários vinculem suas contas em seu serviço com suas Contas do Google. O link estabelecido concede ao Google acesso aos dados que o usuário consente em compartilhar.

Essa abordagem melhora o desempenho da vinculação de contas, envolvendo os usuários no contexto conhecido do app em vez de uma conversa do Google Assistente. Ele pode ser integrado à integração do usuário, configurações e outras superfícies do app, criando oportunidades de descoberta e engajamento da ação do Google Assistente. Por exemplo, após a vinculação, você pode se oferecer para levar o usuário diretamente à sua ação.

Os benefícios para os usuários incluem:

  • Os usuários podem iniciar e concluir o processo de vinculação de contas em seu aplicativo, um ambiente com o qual já estão familiarizados.
  • Os usuários não precisam de credenciais de login porque já foram autenticados no dispositivo e no seu aplicativo móvel.

Os benefícios para os desenvolvedores incluem:

  • Controle onde promover e iniciar a vinculação de contas em seu aplicativo para dispositivos móveis, por exemplo, nas configurações do usuário, em intersticiais ou depois que um usuário fizer login no seu aplicativo para dispositivos móveis. Adicionar vários pontos de entrada para iniciar a vinculação de contas ajuda a tornar a vinculação de contas mais detectável, resultando em maior envolvimento e número de contas vinculadas.
  • Aumento na taxa de conversão, pois os usuários podem concluir o processo de vinculação em menos etapas do que o fluxo OAuth padrão baseado na Web .
  • Baixo esforço de engenharia necessário para implementar o Link da sua plataforma (Android) porque esse fluxo aproveita sua implementação OAuth2.0 existente, supondo que você já tenha um implementado.
  • Taxas de desistência reduzidas porque os usuários não precisam reinserir suas credenciais de login e podem concluir o processo em menos etapas. As taxas de desistência podem chegar a 80% em fluxos em que os usuários precisam recuperar e inserir suas credenciais de login.

Como funciona

A vinculação da sua plataforma é concluída nas seguintes etapas:

  1. O usuário clica / alterna um acionador de vinculação no app para dispositivos móveis.
  2. O usuário seleciona a Conta do Google que será vinculada.
    1. O usuário seleciona uma Conta do Google no dispositivo para vincular ou faz login com uma nova conta
  3. O usuário vê telas de consentimento hospedadas pelo Google e precisa concordar em continuar ou cancelar para interromper o processo de vinculação.
  4. O usuário vê sua tela de consentimento e precisa concordar em continuar ou cancelar para interromper o processo de vinculação.
  5. O vínculo é estabelecido entre a conta do usuário, no seu serviço, e a Conta do Google dele.

Figura 1. Link do fluxo da plataforma

Requisitos

Para implementar o link na sua plataforma, você precisa do seguinte:

Instalação

Antes de prosseguir com as etapas abaixo, é necessário concluir o processo de registro de vinculação de contas.

Configurar o ambiente de desenvolvimento

Instale a versão mais recente do Google Play Services no seu host de desenvolvimento:

  1. Abra o Android SDK Manager.
  1. Em SDK Tools, encontre Google Play Services.

  2. Se o status desses pacotes não for "Instalado", selecione ambos e clique em Instalar pacotes.

Configurar o app

  1. No arquivo build.gradle no nível do projeto, inclua o repositório Maven do Google nas seções buildscript e allprojects.

    buildscript {
        repositories {
            google()
        }
    }
    
    allprojects {
        repositories {
            google()
        }
    }
    
  2. Adicione as dependências da API "Link with Google" ao arquivo Gradle do módulo no nível do app, que geralmente é app/build.gradle:

    dependencies {
      implementation 'com.google.android.gms:play-services-auth:21.0.0'
    }
    

O link do fluxo da sua plataforma vai fazer com que um token de acesso (fornecido pelo seu serviço) seja salvo pelo Google. É preciso ter consentimento do usuário antes de retornar o token.

Siga as etapas abaixo para receber o consentimento do usuário e retornar um token de código de autenticação pelo SDK do Google Play Services.

  1. Crie uma PendingIntent para iniciar sua atividade de consentimento. O consentimento é iniciado pela API Play Services. Será necessário informar um PendingIntent (chamado de consentPendingIntent para maior clareza) quando a API for chamada.

    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. Criar uma atividade correspondente para processar a intent de consentimento

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

    Presumimos que os métodos onConsentAccpeted() e onConsentRejectedOrCanceled() são chamados quando o usuário aceita ou rejeita/cancela o consentimento, respectivamente.

  3. Crie uma solicitação para salvar o token e, entre outros parâmetros de configuração, transmita o PendingIntent criado na etapa 1 acima.

    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));
      ```
    

As etapas acima solicitam o consentimento do usuário e retornam um código de autorização ao Google.

Práticas recomendadas

  • Seu app precisa indicar o status do link ao usuário com um botão, um botão de alternância ou um elemento visual semelhante.

    Figura 1. Exemplo de imagem de status do link

  • Você precisa notificar o usuário depois de um link bem-sucedido, por exemplo, exibir um aviso, acionar uma mudança de estado de alternância ou redirecionar o usuário para uma página separada de êxito do link.

  • Você deve considerar solicitar que os usuários no app vinculem contas, de preferência com base em indicadores fortes de que a vinculação beneficiaria esses usuários.

  • Após vincular, dê aos usuários um exemplo do que fazer com a conta vinculada. Por exemplo, se você acabou de vincular um serviço de streaming de música, peça ao Google Assistente para tocar música.

  • Permita que os usuários gerenciem as contas vinculadas, incluindo a opção de desvinculá-las. Direcione o usuário para a página de gerenciamento de contas vinculadas do Google, https://myaccount.google.com/accountlinking.

Referência

Documentação de referência da API Android Auth