Se o app que usa o Smart Lock para senhas compartilha um banco de dados de usuários com seu site ou se o app e o site usam provedores de login federados, como o Login do Google, é possível associar o app ao site para que os usuários salvem as credenciais uma vez e façam login automaticamente no app e no site.
Para associar um app a um site, declare associações hospedando um arquivo JSON do Digital Asset Links e adicionando um link ao arquivo Digital Asset Link ao manifesto do seu app.
Ao hospedar uma declaração de links de recursos digitais no seu site, você também permite que o site compartilhe dados de preenchimento automático com seu app ao executar no Android 8.0 e versões mais recentes.
Pré-requisitos
O domínio de login do seu site precisa estar disponível via HTTPS.
Associar o app ao site
Crie um arquivo JSON do Digital Asset Links.
Por exemplo, para declarar que o site
https://signin.example.com
e um app Android com o nome de pacotecom.example
podem compartilhar credenciais de login, crie um arquivo chamadoassetlinks.json
com o seguinte conteúdo:[{ "relation": ["delegate_permission/common.get_login_creds"], "target": { "namespace": "web", "site": "https://signin.example.com" } }, { "relation": ["delegate_permission/common.get_login_creds"], "target": { "namespace": "android_app", "package_name": "com.example", "sha256_cert_fingerprints": [ "F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B" ] } }]
O campo
relation
é uma matriz de uma ou mais strings que descrevem o relacionamento declarado. Para declarar que apps e sites compartilham credenciais de login, especifique a stringdelegate_permission/common.get_login_creds
.O campo
target
é um objeto que especifica o recurso aplicado à declaração. Os seguintes campos identificam um site:namespace
web
site
O URL do site, no formato
https://domain[:optional_port]
. Por exemplo,https://www.example.com
.O domain precisa ser totalmente qualificado, e optional_port precisa ser omitido ao usar a porta 443 para HTTPS.
Um destino
site
só pode ser um domínio raiz: não é possível limitar uma associação de aplicativo a um subdiretório específico. Não inclua um caminho no URL, como uma barra no final.Os subdomínios não são considerados correspondentes: ou seja, se você especificar domain como
www.example.com
, o domíniowww.counter.example.com
não será associado ao seu app.Os campos a seguir identificam um app Android:
namespace
android_app
package_name
O nome do pacote declarado no manifesto do app. Por exemplo, com.example.android
sha256_cert_fingerprints
As impressões digitais SHA256 do certificado de assinatura do app. É possível usar o seguinte comando para gerar a impressão digital: $ keytool -list -v -keystore my-release-key.keystore
Consulte a referência dos links de recursos digitais para mais detalhes.
Hospede o arquivo JSON do Digital Assets Link no seguinte local no domínio de login:
https://domain[:optional_port]/.well-known/assetlinks.json
Por exemplo, se o domínio de login for
signin.example.com
, hospede o arquivo JSON emhttps://signin.example.com/.well-known/assetlinks.json
.O tipo MIME do arquivo do link de recursos digitais precisa ser JSON. Verifique se o servidor envia um cabeçalho
Content-Type: application/json
na resposta.O host precisa permitir que o Google recupere o arquivo do link de recursos digitais. Se você tiver um arquivo
robots.txt
, ele precisará permitir que o agente do Googlebot recupere/.well-known/assetlinks.json
. A maioria dos sites pode simplesmente permitir que qualquer agente automatizado recupere arquivos no caminho/.well-known/
para que outros serviços possam acessar os metadados nesses arquivos:User-agent: * Allow: /.well-known/
Declare a associação no app Android.
Adicione a seguinte linha ao arquivo de manifesto em
<application>
:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
Adicione um recurso de string
asset_statements
ao arquivostrings.xml
. A stringasset_statements
é um objeto JSON que especifica os arquivosassetlinks.json
que serão carregados. Faça o escape de apóstrofes e aspas que você usa na string. Exemplo:<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>
> GET /.well-known/assetlinks.json HTTP/1.1 > User-Agent: curl/7.35.0 > Host: signin.example.com < HTTP/1.1 200 OK < Content-Type: application/json
Publique o app na Google Play Store. Ele precisa ser liberado no canal público para que as associações sejam selecionadas.
(Opcional) Preencha e envie o formulário de afiliação do Smart Lock para senhas para indicar que você passou pelo processo. O Google verifica periodicamente se as afiliações enviadas por meio do formulário realmente funcionam e podem entrar em contato com você em caso de problemas.
Quando a verificação for concluída, os usuários do seu aplicativo poderão salvar as credenciais no aplicativo ou no site e fazer login automaticamente neles.
Exemplo: associar vários apps a um site
É possível associar vários apps a um site especificando cada app no
arquivo "Link de recursos digitais". Por exemplo, para associar os apps com.example
e
com.example.pro
ao site em https://signin.example.com/
, especifique
os dois apps no arquivo JSON hospedado em
https://signin.example.com/.well-known/assetlinks.json
:
[{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://signin.example.com"
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example.pro",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
}]
Em seguida, declare a associação nos dois apps:
Adicione a seguinte linha ao arquivo de manifesto em
<application>
:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
Adicione o seguinte recurso de string ao arquivo
strings.xml
:<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>
Exemplo: associar apps a vários sites
É possível associar apps a vários sites especificando cada site no
arquivo Link de recursos digitais e hospedando o arquivo em cada um deles. Por exemplo, para
associar os apps com.example
e com.example.pro
ao site em
https://signin.example.com/
e https://m.example.com/
, especifique
os dois apps e os dois sites no arquivo JSON hospedado em
https://signin.example.com/.well-known/assetlinks.json
:
[{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://signin.example.com"
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "web",
"site": "https://m.example.com"
},
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
},{
"relation": ["delegate_permission/common.get_login_creds"],
"target": {
"namespace": "android_app",
"package_name": "com.example.pro",
"sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
]
}
}]
Em seguida, no arquivo JSON hospedado em
https://m.example.com/.well-known/assetlinks.json
, inclua o arquivo principal
de links de recursos digitais:
[{
"include": "https://signin.example.com/.well-known/assetlinks.json"
}]
Por fim, declare a associação nos dois apps:
Adicione a seguinte linha ao arquivo de manifesto em
<application>
:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
Adicione o seguinte recurso de string ao arquivo
strings.xml
:<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>