Se la tua app che utilizza Smart Lock per password condivide un database di utenti con il tuo sito web o se l'app e il sito web utilizzano fornitori di accesso federati come Accedi con Google, puoi associare l'app al sito web in modo che gli utenti salvino le proprie credenziali una volta e poi accedano automaticamente sia all'app sia al sito web.
Per associare un'app a un sito web, dichiara le associazioni ospitando un file JSON Digital Asset Links sul tuo sito web e aggiungendo un link al file Digital Asset Link al file manifest dell'app.
Se ospiti una dichiarazione Digital Asset Links sul tuo sito web, consenti anche a quest'ultimo di condividere i dati di compilazione automatica con la tua app quando viene eseguita su Android 8.0 e versioni successive.
Prerequisiti
Il dominio di accesso del tuo sito web deve essere disponibile tramite HTTPS.
Associare l'app al sito web
Crea un file JSON Digital Asset Links.
Ad esempio, per dichiarare che il sito web
https://signin.example.com
e un'app Android con nome del pacchettocom.example
possono condividere le credenziali di accesso, crea un file denominatoassetlinks.json
con i seguenti contenuti:[{ "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" ] } }]
Il campo
relation
è un array di una o più stringhe che descrivono la relazione dichiarata. Per dichiarare che le app e i siti condividono le credenziali di accesso, specifica la stringadelegate_permission/common.get_login_creds
.Il campo
target
è un oggetto che specifica l'asset a cui si applica la dichiarazione. I seguenti campi identificano un sito web:namespace
web
site
L'URL del sito web, nel formato
https://domain[:optional_port]
; ad esempio,https://www.example.com
.domain deve essere completo e optional_port deve essere omesso quando si utilizza la porta 443 per HTTPS.
Una destinazione
site
può essere solo un dominio principale: non puoi limitare l'associazione di un'app a una sottodirectory specifica. Non includere nell'URL un percorso, ad esempio una barra finale.I sottodomini non vengono considerati corrispondenti, ovvero, se specifichi domain come
www.example.com
, il dominiowww.counter.example.com
non viene associato alla tua app.I seguenti campi identificano un'app per Android:
namespace
android_app
package_name
Il nome del pacchetto dichiarato nel file manifest dell'app. Ad esempio, com.example.android
sha256_cert_fingerprints
Le impronte SHA256 del certificato di firma della tua app. Puoi utilizzare il seguente comando per generare l'impronta: $ keytool -list -v -keystore my-release-key.keystore
Per ulteriori dettagli, consulta il riferimento sui link agli asset digitali.
Ospita il file JSON Digital Assets Link nella seguente posizione nel dominio di accesso:
https://domain[:optional_port]/.well-known/assetlinks.json
Ad esempio, se il dominio di accesso è
signin.example.com
, ospita il file JSON suhttps://signin.example.com/.well-known/assetlinks.json
.Il tipo MIME per il file Digital Assets Link deve essere JSON. Assicurati che il server invii un'intestazione
Content-Type: application/json
nella risposta.Assicurati che l'host consenta a Google di recuperare il file di Digital Asset Link. Se hai un file
robots.txt
, l'agente Googlebot deve poter recuperare/.well-known/assetlinks.json
. La maggior parte dei siti può semplicemente consentire a qualsiasi agente automatico di recuperare i file nel percorso/.well-known/
in modo che altri servizi possano accedere ai metadati in tali file:User-agent: * Allow: /.well-known/
Dichiara l'associazione nell'app per Android.
Aggiungi la seguente riga al file manifest in
<application>
:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
Aggiungi una risorsa della stringa
asset_statements
al filestrings.xml
. La stringaasset_statements
è un oggetto JSON che specifica i fileassetlinks.json
da caricare. È necessario eseguire l'escape di eventuali apostrofi e virgolette utilizzati nella stringa. Ad esempio:<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
Pubblica l'app sul Google Play Store. Deve essere rilasciato nel canale pubblico per poter selezionare le associazioni.
(Facoltativo) Completa e invia il modulo di affiliazione Smart Lock per password per indicare che hai seguito la procedura. Google verifica periodicamente se le affiliazioni inviate tramite il modulo funzionano effettivamente e potrebbe contattarti in caso di problemi.
Al termine della verifica, gli utenti della tua app possono salvare le loro credenziali nell'app o sul tuo sito web e accedere automaticamente a entrambi.
Esempio: associare più app a un sito web
Puoi associare più app a un sito web specificando ogni app nel file Digital Assets Link. Ad esempio, per associare le app com.example
e com.example.pro
al sito all'indirizzo https://signin.example.com/
, specifica entrambe le app nel file JSON ospitato in 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"
]
}
}]
Quindi, dichiara l'associazione in entrambe le app:
Aggiungi la seguente riga al file manifest in
<application>
:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
Aggiungi la seguente risorsa stringa al file
strings.xml
:<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>
Esempio: associare app a più siti web
Puoi associare le app a più siti web specificando ciascun sito web nel file Digital Assets Link e ospita il file su ogni sito web. Ad esempio, per associare le app com.example
e com.example.pro
al sito all'indirizzo https://signin.example.com/
e https://m.example.com/
, specifica sia le app sia entrambi i siti nel file JSON ospitato all'indirizzo 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"
]
}
}]
Quindi, nel file JSON ospitato su https://m.example.com/.well-known/assetlinks.json
, includi il file Digital Asset Links principale:
[{
"include": "https://signin.example.com/.well-known/assetlinks.json"
}]
Infine, dichiara l'associazione in entrambe le app:
Aggiungi la seguente riga al file manifest in
<application>
:<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
Aggiungi la seguente risorsa stringa al file
strings.xml
:<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>