Ativar o login automático em apps e sites

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

  1. 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 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 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 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ínio www.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.

  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 do link de recursos digitais precisa ser JSON. Verifique se o servidor envia um cabeçalho Content-Type: application/json na resposta.

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

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

  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 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:

  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 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:

  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>