Si la app que usa Smart Lock para contraseñas comparte una base de datos de usuarios con tu sitio web (o si estos 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 accedan automáticamente a la app y al sitio web.
Para asociar una app con un sitio web, debes declarar las asociaciones. Para ello, aloja un archivo JSON de Vínculos de recursos digitales en tu sitio web y agrega un vínculo al archivo de Vínculos de recursos digitales al manifiesto de tu app.
Cuando alojas una declaración de Vínculos de recursos digitales en tu sitio web, también habilitas el sitio web para compartir datos de autocompletado con tu app cuando se ejecuta 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
Crea un archivo JSON de Digital Asset Links.
Por ejemplo, para declarar que el sitio web
https://signin.example.com
y una app para Android con el nombre de paquetecom.example
pueden compartir credenciales de acceso, crea un archivo llamadoassetlinks.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 array de una o más cadenas que describen la relación que se declara. Para declarar que las apps y los sitios comparten credenciales de acceso, especifica la cadenadelegate_permission/common.get_login_creds
.El campo
target
es un objeto que especifica el recurso al que se aplica la declaración. Los siguientes campos identifican un sitio web:namespace
web
site
La URL del sitio web, en el formato
https://domain[:optional_port]
; por ejemplo,https://www.example.com
.domain debe estar completamente calificado 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 considera que los subdominios coincidan, es decir, si especificas domain como
www.example.com
, el dominiowww.counter.example.com
no estará asociado a tu app.En los siguientes campos, se identifica una app para Android:
namespace
android_app
package_name
El nombre de 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 detalles.
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 el dominio de acceso es
signin.example.com
, aloja el archivo JSON enhttps://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.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 de acceso/.well-known/
para que otros servicios puedan acceder a los metadatos en esos archivos:User-agent: * Allow: /.well-known/
Declara la asociación en la app para Android.
Agrega la siguiente línea al archivo de manifiesto en
<application>
:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
Agrega un recurso de cadenas
asset_statements
al archivostrings.xml
. La cadenaasset_statements
es un objeto JSON que especifica los archivosassetlinks.json
que se cargarán. Debes escapar cualquier apóstrofo y comillas que uses en la cadena. 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
Publica la app en Google Play Store. Debe lanzarse en el canal público para que se recopilen las asociaciones.
(Opcional) Completa y envía el formulario de afiliación de Smart Lock para contraseñas a fin de indicar que completaste el proceso. Google verifica periódicamente si las afiliaciones enviadas a través del formulario realmente funcionan y podría comunicarse contigo en caso de problemas.
Cuando se complete la verificación, los usuarios de tu app podrán guardar sus credenciales en tu app o sitio web y acceder automáticamente a ambos.
Ejemplo: Asocia varias apps a un sitio web
Puedes asociar varias apps a un sitio web si especificas cada una en el archivo de Vínculos de recursos digitales. Por ejemplo, para asociar las apps de com.example
y com.example.pro
con el 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, debes declarar la asociación en ambas apps:
Agrega la siguiente línea al archivo de manifiesto en
<application>
:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
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 con varios sitios web
Puedes asociar apps con varios sitios web especificando cada sitio web en el archivo de Vínculos de recursos digitales y alojando el archivo en cada sitio web. Por ejemplo, para asociar las apps de com.example
y com.example.pro
con el sitio en https://signin.example.com/
y https://m.example.com/
, especifica las 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 Vínculos de recursos digitales:
[{
"include": "https://signin.example.com/.well-known/assetlinks.json"
}]
Por último, declara la asociación en ambas apps:
Agrega la siguiente línea al archivo de manifiesto en
<application>
:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
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>