Depois de ter uma implementação do OAuth 2.0, você pode configurar o App Flip baseado em OAuth, que permite que os usuários do Android vinculem as contas no seu sistema de autenticação às Contas do Google de forma mais rápida. As seções a seguir descrevem como projetar e implementar o App Flip para sua integração do Cloud-to-cloud no Android.
Diretrizes de design
Esta seção descreve os requisitos e as recomendações de design para a tela de consentimento da vinculação de contas do App Flip. Depois que o Google chamar seu app, ele vai mostrar a tela de consentimento ao usuário.
Requisitos
- Você precisa ter uma declaração de autorização do Google, como "Depois de vinculada, o Google terá permissão para controlar seus dispositivos".
- Você precisa informar que a conta do usuário está sendo vinculada ao Google, não a um produto específico, como o Google Home ou o Google Assistente.
- É necessário indicar uma call-to-action clara na tela de consentimento e usar a frase "Concordar e vincular" para a ação de vinculação. Isso acontece porque os usuários precisam entender quais dados são obrigatórios para compartilhar com o Google e vincular as contas.
- Você precisa oferecer uma maneira para os usuários voltarem, negarem ou cancelarem, caso eles escolham não vincular. Use a palavra "Cancelar" para a ação de cancelamento.
- Você precisa implementar este fluxo de trabalho: depois de clicar em "Concordar e vincular", mostre o sucesso da vinculação e redirecione o usuário de volta ao app Google Home automaticamente. O usuário vai ver o dispositivo vinculado no app Google Home com sua ação. Depois de clicar em "Cancelar", redirecione o usuário de volta para o app Google Home.
Recomendações
Portanto, recomendamos que você faça o seguinte:
Mostrar a Política de Privacidade do Google. Inclua um link para a Política de Privacidade do Google na tela de consentimento.
Dados que serão compartilhados. Use uma linguagem clara e concisa para informar ao usuário quais dados dele o Google exige e por quê.
Capacidade de desvincular. Ofereça um mecanismo para os usuários desvincularem, como um URL para as configurações da conta na sua plataforma. Como alternativa, inclua um link para a Conta do Google, onde os usuários podem gerenciar a conta vinculada.
Capacidade de mudar a conta de usuário. Sugira um método para os usuários trocarem de conta. Isso é especialmente útil se os usuários costumam ter várias contas.
- Se um usuário precisar fechar a tela de permissão para trocar de conta, envie um erro recuperável ao Google para que ele possa fazer login na conta desejada com a vinculação do OAuth e o fluxo implícito.
Inclua seu logotipo. Mostre o logotipo da sua empresa na tela de consentimento. Use as diretrizes de estilo para posicionar seu logotipo. Se você também quiser mostrar o logotipo do Google, consulte Logotipos e marcas registradas.
Configurar para App Flip com base em OAuth
As seções a seguir descrevem os pré-requisitos para a vinculação no app baseada em OAuth e como configurar seu projeto de vinculação no app no Console para Desenvolvedores do Google Home.
Criar uma integração de nuvem para nuvem e configurar um servidor OAuth 2.0
Antes de configurar o App Flip, faça o seguinte:
- Configure um servidor OAuth 2.0. Para mais informações sobre como configurar um servidor OAuth, consulte Implementar um servidor OAuth 2.0.
- Criar uma integração de nuvem para nuvem. Para criar uma integração, siga as instruções em Criar uma integração de nuvem para nuvem.
Configurar a vinculação no app no Console para Desenvolvedores
A seção a seguir descreve como configurar a vinculação no app no Developer Console.
- Preencha todos os campos obrigatórios(*) em Vinculação de contas. Se a vinculação no app não for compatível, o OAuth normal será usado como substituto.
- Insira um URL para o URL de fulfillment do Cloud. O URL de fulfillment da nuvem é usado para processar as intents de casa inteligente. Marque Local fulfillment.
- Em Vinculação no app (opcional), marque App Android.
- Preencha os seguintes campos:
- ID do aplicativo. O ID do aplicativo é um ID exclusivo que você define para seu app.
- Assinatura de apps. Os apps Android precisam ser "assinados" com um certificado de chave pública antes de serem instalados. Para saber como conseguir a assinatura de apps, consulte Como autenticar seu cliente.
- Intenção de autorização. Nesse campo, insira uma string que especifique sua ação de intent.
- Se quiser configurar o cliente, adicione escopos e clique em Adicionar escopo em Escopos (opcional).
- Se o cliente exigir, selecione Fazer com que o Google transmita o ID do cliente e a chave secreta pelo cabeçalho de autenticação básica HTTP.
Agora, prossiga para a próxima seção para implementar App Flip no seu app Android.
Implementar o App Flip nos seus apps nativos
Para implementar o App Flip, é necessário modificar o código de autorização do usuário no app para aceitar um link direto do Google.
A vinculação no app baseada em OAuth (App Flip) insere seu app Android no fluxo de vinculação da Conta do Google. Em um fluxo tradicional de vinculação de contas, o usuário precisa inserir as credenciais no navegador. O uso da vinculação no app adia o login do usuário no app Android, o que permite aproveitar as autorizações existentes. Se o usuário estiver conectado ao seu app, ele não precisará inserir as credenciais novamente para vincular a conta. É necessário fazer poucas mudanças no código para implementar a vinculação no app no seu app Android.
Neste documento, você vai aprender a modificar seu app Android para que ele seja compatível com a vinculação no app.
Testar o exemplo
O app de exemplo de vinculação no app demonstra uma integração de vinculação de conta compatível com a vinculação no app no Android. Você pode usar esse app para verificar como responder a uma intent de vinculação no app recebida de apps do Google para dispositivos móveis.
O app de exemplo é pré-configurado para se integrar à ferramenta de teste de vinculação no app para Android, que pode ser usada para verificar a integração do seu app Android com a vinculação no app antes de configurar a vinculação de contas com o Google. Esse app simula a intent acionada pelos apps para dispositivos móveis do Google quando a vinculação no app está ativada.
Como funciona
As etapas a seguir são necessárias para realizar uma integração de vinculação no app:
- O Google app verifica se o app está instalado no dispositivo usando o nome do pacote.
- O app do Google usa uma verificação de assinatura de pacote para validar se o app instalado é o correto.
- O app Google cria uma intent para iniciar uma atividade designada no seu app. Essa intent inclui dados adicionais necessários para a vinculação. Ele também verifica se o app é compatível com a vinculação no app resolvendo essa intent pelo framework do Android.
- Seu app valida que a solicitação vem do app do Google. Para isso, ele verifica a assinatura do pacote e o ID do cliente fornecido.
- O app solicita um código de autorização do servidor OAuth 2.0. No final desse fluxo, ele retorna um código de autorização ou um erro para o app do Google.
- O app do Google recupera o resultado e continua com a vinculação da conta. Se um código de autorização for fornecido, a troca de tokens vai acontecer de servidor para servidor, da mesma forma que no fluxo de vinculação do OAuth baseado em navegador.
Modificar o app Android para oferecer suporte à Vinculação no App
Para oferecer suporte à Vinculação no App, faça as seguintes mudanças no código do seu app Android:
Adicione um
<intent-filter>ao arquivoAndroidManifest.xmlcom uma string de ação que corresponda ao valor inserido no campo Intent de vinculação no app.<activity android:name="AuthActivity"> <!-- Handle the app flip intent --> <intent-filter> <action android:name="INTENT_ACTION_FROM_CONSOLE"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>Valide a assinatura do app de chamada.
É necessário corresponder o nome do pacote e a assinatura de todos os apps do Google que os usuários podem usar para vincular contas. Por exemplo, para vincular aos apps Google Home e Pesquisa, adicione os nomes de pacotes e as assinaturas deles:
- Nome do pacote:
com.google.android.apps.chromecast.app - Certificado de linhagem SHA-256 original:
3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A - Certificado SHA-256 da Assinatura de apps do Google Play alternado:
5A:AD:2B:EE:6D:B9:5D:17:E0:5A:08:D7:D1:E6:4C:10:A1:51:18:79:15:44:83:91:6B:6A:E6:C7:FD:9C:B0:C6
e
- Nome do pacote:
com.google.android.googlequicksearchbox - Assinatura:
F0:FD:6C:5B:41:0F:25:CB:25:C3:B5:33:46:C8:97:2F:AE:30:F8:EE:74:11:DF:91:04:80:AD:6B:2D:60:DB:83
As solicitações de vinculação de casa inteligente são iniciadas diretamente pelo Google Home app (GHA). Se o aplicativo restringe os autores de chamadas e anteriormente só permitia o app Pesquisa Google, adicione
com.google.android.apps.chromecast.appe os certificados SHA-256 dele à lista de permissões para que a vinculação no app continue funcionando.private fun verifyFingerprint( expectedPackage: String, expectedFingerprints: List<String> ): Boolean { val callingPackage = callingActivity?.packageName ?: return false if (callingPackage != expectedPackage) return false return expectedFingerprints.any { hex -> val sha256Bytes = hex.split(":").map { it.toInt(16).toByte() }.toByteArray() packageManager.hasSigningCertificate( callingPackage, sha256Bytes, PackageManager.CERT_INPUT_SHA256 ) } }- Nome do pacote:
Extraia o ID do cliente dos parâmetros da intent e verifique se ele corresponde ao valor esperado.
private const val EXPECTED_CLIENT = "<client-id-from-actions-console>" private const val EXPECTED_PACKAGE = "com.google.android.apps.chromecast.app" // Original lineage certificate (3D:7A...) and active rotated // Play App Signing certificate (5A:AD...) private val EXPECTED_FINGERPRINTS = listOf( "3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A", "5A:AD:2B:EE:6D:B9:5D:17:E0:5A:08:D7:D1:E6:4C:10:A1:51:18:79:15:44:83:91:6B:6A:E6:C7:FD:9C:B0:C6" ) ... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val clientId = intent.getStringExtra("CLIENT_ID") if (clientId == EXPECTED_CLIENT && verifyFingerprint(EXPECTED_PACKAGE, EXPECTED_FINGERPRINTS)) { // ...authorize the user... } }Após a autorização, retorne o código de autorização resultante para o Google.
// Successful result val data = Intent().apply { putExtra("AUTHORIZATION_CODE", authCode) } setResult(Activity.RESULT_OK, data) finish()Se ocorrer um erro, retorne um resultado de erro.
// Error result val error = Intent().apply { putExtra("ERROR_TYPE", 1) putExtra("ERROR_CODE", 1) putExtra("ERROR_DESCRIPTION", "Invalid Request") } setResult(-2, error) finish()
Conteúdo da intent de inicialização
A intent do Android que inicia o app inclui os seguintes campos:
CLIENT_ID(String): oclient_iddo Google registrado no seu app.SCOPE(String[]): uma lista de escopos solicitados.REDIRECT_URI(String): o URL de redirecionamento.
Conteúdo dos dados de resposta
Os dados retornados ao app do Google são definidos no seu app chamando setResult().
Esses dados incluem o seguinte:
AUTHORIZATION_CODE(String): o valor do código de autorização.resultCode(int): comunica o sucesso ou a falha do processo e assume um dos seguintes valores:Activity.RESULT_OK: indica sucesso. Um código de autorização é retornado.Activity.RESULT_CANCELLED: um erro recuperável. Sinaliza que o usuário cancelou o processo. Nesse caso, o app do Google vai tentar vincular a conta novamente usando seu URL de autorização.-2: indica que ocorreu um erro. Os diferentes tipos de erros são descritos abaixo.
ERROR_TYPE(int): o tipo de erro, que usa um dos seguintes valores:1: erro recuperável. O app do Google vai tentar vincular a conta usando o URL de autorização.2: erro irrecuperável: o app do Google cancela a vinculação da conta.3: parâmetros de solicitação inválidos ou ausentes.
ERROR_CODE(int): um número inteiro que representa a natureza do erro. Para saber o que cada código do erro significa, consulte a tabela de códigos do erro.ERROR_DESCRIPTION(String, opcional): mensagem de status legível por humanos que descreve o erro.
Um valor para AUTHORIZATION_CODE é esperado quando
resultCode == Activity.RESULT_OK. Em todos os outros casos, o valor de
AUTHORIZATION_CODE precisa estar vazio. Se for resultCode == -2, o valor ERROR_TYPE precisa ser preenchido.
Tabela de códigos do erro
A tabela abaixo mostra os diferentes códigos do erro e se cada um é recuperável ou erro irrecuperável:
| Código do erro | Significado | Recuperável | Irrecuperável |
|---|---|---|---|
1 |
INVALID_REQUEST |
✔ | |
2 |
NO_INTERNET_CONNECTION |
✔ | |
3 |
OFFLINE_MODE_ACTIVE |
✔ | |
4 |
CONNECTION_TIMEOUT |
✔ | |
5 |
INTERNAL_ERROR |
✔ | |
6 |
AUTHENTICATION_SERVICE_UNAVAILABLE |
✔ | |
8 |
CLIENT_VERIFICATION_FAILED |
✔ | |
9 |
INVALID_CLIENT |
✔ | |
10 |
INVALID_APP_ID |
✔ | |
11 |
INVALID_REQUEST |
✔ | |
12 |
AUTHENTICATION_SERVICE_UNKNOWN_ERROR |
✔ | |
13 |
AUTHENTICATION_DENIED_BY_USER |
✔ | |
14 |
CANCELLED_BY_USER |
✔ | |
15 |
FAILURE_OTHER |
✔ | |
16 |
USER_AUTHENTICATION_FAILED |
✔ |
Para todos os códigos de erro, é necessário retornar o resultado do erro usando setResult para
garantir que o substituto adequado seja acionado.
Teste o App Flip no seu dispositivo
Agora que você criou uma integração de nuvem para nuvem e configurou a vinculação no app no console e no app, é possível testar a vinculação no app no seu dispositivo móvel. Use o app Google Home para testar a vinculação no app.
Para testar o App Flip no app Google Home, siga estas etapas:
- Acesse o Developer Console e selecione seu projeto.
- Acesse Cloud-to-cloud > Test.
- Acione o fluxo de vinculação de contas no app Home:
- Abra o Google Home app (GHA).
- Clique no botão +.
- Clique em Configurar dispositivo.
- Clique em Já tem algo configurado?
- Selecione sua integração de nuvem para nuvem na lista de provedores. Ele vai ter o prefixo "[test]" na lista. Quando você selecionar sua integração [teste] na lista, o app será aberto.
- Verifique se o app foi iniciado e comece a testar o fluxo de autorização.