Anweisungen werden in einer JSON-codierten Anweisungsliste an einem bekannten Speicherort in einem Hauptkonto gehostet, wie in der Spezifikation für Asset-Links definiert. Eine Anweisungsliste enthält eine oder mehrere Anweisungen und ein Hauptkonto kann nur eine Anweisungsliste haben.
Syntax der Anweisungsliste
Siehe Syntax der Anweisungsliste.
Speicherort der Anweisungsliste
Die Liste der Anweisungen befindet sich an einem bekannten Ort, der vom Typ des Hauptkontos abhängig ist (Website oder App, von der die Anweisungen stammen).
Listen mit Website-Kontoauszug
Auf einer Website ist eine Anweisungsliste eine Textdatei, die sich unter der folgenden Adresse befindet:
scheme://domain/.well-known/assetlinks.json
Achten Sie auf den Punkt im Ordnernamen „.well-known“.
Jede Antwort vom Server mit Ausnahme von HTTP 200
wird als Fehler behandelt und führt zu einer leeren Anweisungsliste. Bei HTTPS führt jede Verbindung ohne Zertifikatskette, die mit der vertrauenswürdigen Stammliste verifiziert werden kann, zu einer leeren Anweisungsliste.
Beispiel
Hier ist ein Beispiel für eine Erklärung auf einer Website: http://example.digitalassetlinks.org/.well-known/assetlinks.json
Statement-Listen für Android-Apps
In einer Android-App ist die Anweisungsliste ein JSON-Snippet mit derselben Syntax wie eine Website-Anweisungsdatei. Sie ist jedoch in die Datei "strings.xml" eingebettet und im Manifest referenziert, wie unten dargestellt.
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>
Beispiel
Hier ist ein Beispiel für ein res/values/strings.xml-Snippet für eine Android-App, die die Standortfreigabe über die App unterstützt (eine Android-Funktion, die derzeit nicht unterstützt wird):
<resources> ... <string name="asset_statements"> [{ \"relation\": [\"delegate_permission/common.share_location\"], \"target\": { \"namespace\": \"web\", \"site\": \"https://example.com\" } }] </string> </resources>
Übereinstimmung mit einem Ziel
Jede Aussage bezieht sich auf ein Ziel. Wenn Sie eine Anweisung verarbeiten, müssen Sie das Ziel in einer Anweisung in Wirklichkeit mit einer Entität abgleichen. Wenn das Anweisungsziel mit der Entität übereinstimmt, wird die Anweisung angewendet. Anhand der folgenden Regeln lässt sich feststellen, ob ein Ziel mit einer bestimmten Entität übereinstimmt:
Websiteziele
Bei einer Website müssen Site-Schema, Host und Port genau übereinstimmen. Standardports für HTTP und HTTPS (80 bzw. 443) werden implizit angenommen. Wenn ein Anweisungsziel http://www.example.com:80 beschreibt, wird die Website http://www.example.com als Übereinstimmung angesehen.
Beispiel
Bei der folgenden Zielanweisung
"target": { "namespace": "web", "site": "https://www.google.com" }
Die folgenden URIs WERDEN übereinstimmen:
- 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/
Die folgenden URLs stimmen NICHT überein:
- http://www.google.com/ (Falsches Schema)
- https://google.com/ (Hostname stimmt nicht überein)
- https://www.google.com:444/ (Port stimmt nicht überein)
App-Ziele
Bei einer App müssen der Zertifikats-Hash und der Paketname des Ziels genau mit der App übereinstimmen.