Le istruzioni sono ospitate in un elenco di istruzioni con codifica JSON in una posizione nota di un principal, come definito dalla specifica Asset Links. Un elenco di istruzioni contiene una o più istruzioni e un principal può avere un solo elenco di istruzioni.
Sintassi dell'elenco di istruzioni
Consulta la sintassi dell'elenco delle istruzioni.
Posizione elenco estratti conto
L'elenco delle dichiarazioni è ospitato in una posizione nota che dipende dal tipo di soggetto principale (il sito web o l'app che effettuano le dichiarazioni).
Elenchi di dichiarazioni del sito web
Su un sito web, un elenco di dichiarazioni è un file di testo che si trova al seguente indirizzo:
scheme://domain/.well-known/assetlinks.json
Prendi nota del punto nel nome della cartella .well-known.
Qualsiasi risposta dal server diversa da HTTP 200 viene trattata come un errore e comporterà
un elenco di estratti vuoto. Per HTTPS, qualsiasi connessione senza una catena di certificati che
possa essere verificata con l'elenco delle CA radice attendibili comporterà anche un elenco di istruzioni vuoto.
Esempio
Ecco un elenco di istruzioni di esempio su un sito web: http://example.digitalassetlinks.org/.well-known/assetlinks.json
Elenchi delle dichiarazioni delle app per Android
In un'app per Android, l'elenco delle istruzioni è uno snippet JSON con la stessa sintassi di un file di istruzioni del sito web, ma è incorporato nel file strings.xml e viene fatto riferimento nel manifest come mostrato di seguito.
In AndroidManifest.xml:
<manifest>
<application>
...
<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
...
</application>
</manifest>In res/values/strings.xml:
<resources>
...
<string name="asset_statements">
... statement list ...
</string>
</resources>
Esempio
Di seguito è riportato un esempio di snippet res/values/strings.xml per un'app per Android che supporta la condivisione della posizione con l'app (una funzionalità di Android attualmente non supportata):
<resources>
...
<string name="asset_statements">
[{
\"relation\": [\"delegate_permission/common.share_location\"],
\"target\": {
\"namespace\": \"web\",
\"site\": \"https://example.com\"
}
}]
</string>
</resources>Corrispondenza di un target
Ogni affermazione riguarda un target. Quando utilizzi un'affermazione, devi confrontare il target di un'affermazione con un'entità nella realtà. Se il target dell'affermazione corrisponde all'entità, l'affermazione viene applicata. Di seguito sono riportate le regole per determinare se un target corrisponde a una determinata entità:
Targeting per sito web
Per un sito web, lo schema, l'host e la porta del sito devono corrispondere esattamente. Le porte predefinite per HTTP e HTTPS (rispettivamente 80 e 443) vengono presupposte implicitamente; se una destinazione dell'istruzione descrive http://www.example.com:80, il sito web http://www.example.com viene considerato una corrispondenza.
Esempio
Considerando il seguente target dell'affermazione
"target": {
"namespace": "web",
"site": "https://www.google.com"
}I seguenti URI CORRISPONDERANNO :
- https://www.google.com/
- https://www.google.com:443/
- https://www.google.com/foo
- https://www.google.com/foo?bar
- https://www.google.com/foo#bar
- https://user@password:www.google.com/
I seguenti URL NON corrisponderanno:
- http://www.google.com/ (schema errato)
- https://google.com/ (Nome host non corrispondente)
- https://www.google.com:444/ (la porta non corrisponde)
Target per app
Per un'app, l'hash del certificato e il nome del pacchetto della destinazione devono corrispondere esattamente all'applicazione.