Habilitar el acceso automático en todas las aplicaciones y sitios web

Si tu app que usa Smart Lock para contraseñas comparte una base de datos de usuarios con tu sitio web (o si usan proveedores de acceso federados, como Acceso con Google), puedes asociar la app con el sitio web para que los usuarios guarden sus credenciales una vez y, luego, accedan automáticamente a la app y al sitio web.

Para asociar una app a un sitio web, debes declarar asociaciones. Para ello, debes alojar un archivo JSON de Digital Asset Links en tu sitio web y agregar un vínculo al archivo de este elemento en el manifiesto de la app.

Si alojas una declaración de Digital Asset Links en tu sitio web, también lo habilitarás para compartir datos de autocompletar con tu app cuando se ejecute en Android 8.0 y versiones posteriores.

Requisitos previos

El dominio de acceso de tu sitio web debe estar disponible a través de HTTPS.

Cómo asociar tu app con tu sitio web

  1. Crea un archivo JSON de Digital Asset Links.

    Por ejemplo, a fin de declarar que el sitio web https://signin.example.com y una app para Android con el nombre de paquete com.example pueden compartir credenciales de acceso, crea un archivo llamado assetlinks.json con el siguiente contenido:

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

    El campo relation es un arreglo de una o más strings que describe la relación que se declara. Para declarar que las apps y los sitios comparten credenciales de acceso, especifica la string delegate_permission/common.get_login_creds.

    El campo target es un objeto que especifica el elemento al que se aplica la declaración. Los siguientes campos identifican a un sitio web:

    namespace web
    site

    La URL del sitio web, en el formato https://domain[:optional_port]; por ejemplo, https://www.example.com.

    El elemento domain debe estar completo y se debe omitir optional_port cuando se usa el puerto 443 para HTTPS.

    Un destino site solo puede ser un dominio raíz: no puedes limitar una asociación de app a un subdirectorio específico. No incluyas una ruta en la URL, como una barra final.

    No se consideran coincidencias con los subdominios; es decir, si especificas domain como www.example.com, el dominio www.counter.example.com no se asociará a tu app.

    En los siguientes campos, se identifica una app para Android:

    namespace android_app
    package_name El nombre del paquete declarado en el manifiesto de la app. Por ejemplo: com.example.android.
    sha256_cert_fingerprints Las huellas digitales SHA256 del certificado de firma de tu app. Puedes usar el siguiente comando para generar la huella digital:
    $ keytool -list -v -keystore my-release-key.keystore

    Consulta la referencia de Vínculos de recursos digitales para obtener más información.

  2. Aloja el archivo JSON de Vínculos de recursos digitales en la siguiente ubicación del dominio de acceso:

    https://domain[:optional_port]/.well-known/assetlinks.json

    Por ejemplo, si tu dominio de acceso es signin.example.com, aloja el archivo JSON en https://signin.example.com/.well-known/assetlinks.json.

    El tipo de MIME del archivo de Vínculos de recursos digitales debe ser JSON. Asegúrate de que el servidor envíe un encabezado Content-Type: application/json en la respuesta.

  3. Asegúrate de que tu host permita que Google recupere tu archivo de Vínculos de recursos digitales. Si tienes un archivo robots.txt, este debe permitir que el agente de Googlebot recupere /.well-known/assetlinks.json. La mayoría de los sitios pueden permitir que cualquier agente automatizado recupere archivos en la ruta /.well-known/ para que otros servicios puedan acceder a los metadatos en esos archivos:

    User-agent: *
    Allow: /.well-known/
    

  4. Declara la asociación en la app para Android.

    1. Agrega la siguiente línea al archivo de manifiesto en <application>:

        <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
      
    2. Agrega un recurso de strings asset_statements al archivo strings.xml. La string asset_statements es un objeto JSON que especifica los archivos assetlinks.json que se cargarán. Debes escapar cualquier apóstrofo y comillas que uses en la string. Por ejemplo:

        <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. Publica la app en Google Play Store. Se debe lanzar en el canal público para que se seleccionen las asociaciones.

  6. (Opcional) Completa y envía el formulario de afiliación de Smart Lock para contraseñas a fin de indicar que realizaste el proceso. Google verifica periódicamente si las afiliaciones que se enviaron a través del formulario realmente funcionan y pueden comunicarse contigo en caso de que surjan problemas.

Cuando se completa la verificación, los usuarios de tu app pueden guardar sus credenciales en la app o en tu sitio web y acceder automáticamente a ambas.

Ejemplo: Asocia varias apps a un sitio web

Puedes asociar varias apps a un sitio web si especificas cada app en el archivo de Vínculos de recursos digitales. Por ejemplo, para asociar las apps com.example y com.example.pro al sitio en https://signin.example.com/, especifica ambas apps en el archivo JSON alojado en 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"
    ]
  }
}]

Luego, declara la asociación en ambas apps:

  1. Agrega la siguiente línea al archivo de manifiesto en <application>:

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
    
  2. Agrega el siguiente recurso de strings al archivo strings.xml:

    <string name="asset_statements" translatable="false">
    [{
      \"include\": \"https://signin.example.com/.well-known/assetlinks.json\"
    }]
    </string>
    

Ejemplo: Asocia apps a varios sitios web

Puedes asociar apps con varios sitios web si especificas cada sitio web en el archivo de Vínculos de recursos digitales y alojas el archivo en cada sitio web. Por ejemplo, para asociar las apps com.example y com.example.pro al sitio en https://signin.example.com/ y https://m.example.com/, especifica ambas apps y ambos sitios en el archivo JSON alojado en 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"
    ]
  }
}]

Luego, en el archivo JSON alojado en https://m.example.com/.well-known/assetlinks.json, incluye el archivo principal de Digital Asset Links:

[{
  "include": "https://signin.example.com/.well-known/assetlinks.json"
}]

Por último, declara la asociación en ambas apps:

  1. Agrega la siguiente línea al archivo de manifiesto en <application>:

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
    
  2. Agrega el siguiente recurso de strings al archivo strings.xml:

    <string name="asset_statements" translatable="false">
    [{
      \"include\": \"https://signin.example.com/.well-known/assetlinks.json\"
    }]
    </string>