Ativar o login automático em vários apps e sites

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

  1. 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 pacote com.example pode compartilhar login credenciais, crie um arquivo chamado assetlinks.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 string delegate_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ínio www.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.

  2. 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 em https://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.

  3. 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/
    

  4. Declarar a associação no app Android.

    1. Adicione a seguinte linha ao arquivo de manifesto em <application>:

        <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
      
    2. Adicione um recurso de string asset_statements ao arquivo strings.xml. A string asset_statements é um objeto JSON que especifica os arquivos assetlinks.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
      
  5. Publique o app na Google Play Store. Precisa ser lançado para o público canal para as associações serem selecionadas.

  6. (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:

  1. Adicione a seguinte linha ao arquivo de manifesto em <application>:

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
    
  2. 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:

  1. Adicione a seguinte linha ao arquivo de manifesto em <application>:

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
    
  2. 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>