Caso seu app que usa o Smart Lock para senhas compartilhe um banco de dados de usuários com seu site, ou caso ele e o site usem 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 Digital Asset Links no seu site e adicionando um link ao arquivo Digital Asset Link ao manifesto do app.
Ao hospedar uma declaração do Digital Asset Links no seu site, você também permite que ele compartilhe dados de preenchimento automático com o app quando executado no Android 8.0 e versões mais recentes.
Pré-requisitos
O domínio de login do site precisa estar disponível por HTTPS.
Associar o app ao site
Crie um arquivo JSON 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 que está sendo 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 a que a declaração se aplica. Os campos a seguir 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 o 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 app a um subdiretório específico. Não inclua um caminho no URL, como uma barra.Não é esperado que os subdomínios apresentem correspondências: ou seja, se você especificar domain como
www.example.com
, o domíniowww.counter.example.com
não será associado ao app.Os campos a seguir identificam um app Android.
namespace
android_app
package_name
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 Digital Asset Links 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 Digital Assets Link precisa ser JSON. Verifique se o servidor envia um cabeçalho
Content-Type: application/json
na resposta.Verifique se o host permite que o Google recupere o arquivo do Digital Asset Link. Se você tiver um arquivo
robots.txt
, ele precisa 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
a serem carregados. É necessário fazer o escape de quaisquer apóstrofos 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 detectadas.
(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 pelo formulário realmente funcionam e pode entrar em contato com você em caso de problemas.
Quando a verificação for concluída, os usuários do app vão poder salvar as credenciais no app ou no site e fazer login automaticamente em ambos.
Exemplo: associar vários aplicativos a um site
É possível associar vários apps a um site especificando cada app no
arquivo Digital Assets Link. 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 aplicativos:
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 um deles no
arquivo Digital Assets Link e hospedando o arquivo em cada site. 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 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 Digital Asset Links
principal:
[{
"include": "https://signin.example.com/.well-known/assetlinks.json"
}]
Por fim, declare a associação nos dois aplicativos:
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>