Se o app que usa o Smart Lock para senhas compartilhar um banco de dados de usuários com sua ou se o app e site usam provedores de login federados, como Login do Google, é possível associar o app ao site para que os usuários salvam suas credenciais uma vez e fazem login automaticamente nos dois e o site.
Para associar um app a um site, declare as associações hospedando um arquivo JSON Digital Asset Links no seu site e adicionando um link para o arquivo Digital Asset Link ao manifesto do app.
Ao hospedar uma declaração do Digital Asset Links no seu site, você também ativa seu site para compartilhar o preenchimento automático dados 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 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
pode compartilhar login credenciais, 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]
para exemplo:https://www.example.com
.O domain precisa ser totalmente qualificado. optional_port deve 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 final.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 seu app Você pode use o seguinte comando para gerar a impressão digital: $ keytool -list -v -keystore my-release-key.keystore
Consulte a referência do Digital Asset Links para mais detalhes.
Hospede o arquivo JSON do Digital Assets Link no seguinte local da 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 extraia/.well-known/assetlinks.json
. A maioria dos sites pode simplesmente permitir que qualquer agente automatizado extraia arquivos no caminho/.well-known/
para que outros serviços possam acessar os metadados nesses arquivos:User-agent: * Allow: /.well-known/
Declarar 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. Exemplos:<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. Precisa ser lançado para o público canal para as associações serem selecionadas.
(Opcional) Preencha e envie formulário de afiliação do Smart Lock para senhas para indicar que você entrou ao longo do processo. O Google verifica periodicamente se as afiliações enviados pelo formulário realmente funcionam e podem entrar em contato com você em caso de para solucionar problemas fáceis e de produção.
Quando a verificação for concluída, os usuários do app poderão salvar as credenciais em no seu app ou site e seja conectado automaticamente a ambos.
Exemplo: associar vários apps a um site
Você pode associar vários aplicativos a um site especificando cada aplicativo no
Arquivo do Digital Assets Link. Por exemplo, para associar com.example
e
com.example.pro
app com o 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 aplicativos a vários sites especificando cada site na
Digital Assets Link e hospedando o arquivo em cada site. Por exemplo, para
associar os aplicativos com.example
e com.example.pro
ao site em
https://signin.example.com/
e https://m.example.com/
, especifique
aplicativos e ambos os 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"
]
}
}]
Depois, no arquivo JSON hospedado em
https://m.example.com/.well-known/assetlinks.json
, inclua a versão principal
Arquivo de links de recurso:
[{
"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>