A statement list is a JSON-encoded file or snippet in a well-known location.
Location of statement list
See Creating a statement list to learn where this list should be stored.
Syntax
The statement list or snippet consists of a JSON array of one or more website or app statements as JSON objects. These statements can be in any order. Here is the general syntax:
[ { "relation": ["relation_string"], "target": {target_object} } , ... ]
- relation
- An array of one or more strings that describe the relation being declared about the target. See the list of defined relation strings. Example:
delegate_permission/common.handle_all_urls
- target
- The target asset to whom this statement applies. Available target types:
- relation_extensions (optional)
-
You can add an optional
relation_extensions
field to a statement to provide more information on the permissions and associations you want to grant. This field should be an object where each key is a relation string, and the value is an object containing the extensions for that relation. Clients that request these statements need to be updated to respect these fields.For example,
relation_extensions
for thedelegate_permission/common.handle_all_urls
relation may look like:{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": ["..."] }, "relation_extensions": { "delegate_permission/common.handle_all_urls": {...} } }
The DAL API supports returning relation_extensions in API calls when the
return_relation_extensions=true
parameter is set in the request.
Example statement list
Here is an example website statement list that contains statements about both websites and apps: http://example.digitalassetlinks.org/.well-known/assetlinks.json
Scaling to dozens of statements or more
In some cases, a principal might want to make many different statements about different targets, or there might be a need to issue statements from different principals to the same set of targets. For example, a website may be available on many different per-country Top Level Domains, and all of them may want to make a statement about the same mobile app.
For these situations, include statements can be helpful. Using this mechanism, you can set up pointers from many different principals to one central location, which defines statements for all of the principals.
For example, you might decide that the central location should be `https://example.com/includedstatements.json`. This file can be configured to contain the same content as in the examples above.
To set up a pointer from a web site to the include file, change `https://example.com/.well-known/assetlinks.json` to:
[{ "include": "https://example.com/includedstatements.json" }]
To set up a pointer from an Android app to the include file, change `res/values/strings.xml` to:
<resources> ... <string name="asset_statements"> [{ \"include\": \"https://example.com/includedstatements.json\" }] </string> </resources>
More Information
There is a more detailed explanation of the statement list format and the underlying concepts in our specification document.