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 seu site ou se o app e o site usarem provedores de login federados, como o Login do Google, será 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 no seu site e adicionando um link para o arquivo do 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 seu site precisa estar disponível por HTTPS.

Associar o app ao site

  1. Crie um arquivo JSON de 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 podem compartilhar credenciais de login, 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], 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 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 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 de Digital Asset Links para mais detalhes.

  2. 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 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. Declare 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. 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
      
  5. Publique o app na Google Play Store. Ela precisa ser liberada no canal público para que as associações sejam detectadas.

  6. (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 poderão 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 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 aplicativos a vários sites

É possível associar apps a vários sites especificando cada site 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 primário:

[{
  "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>