URI입니다. 여기서 <hostname>는 정규화되어야 하며, HTTP에 포트 80을 사용하거나 HTTPS에 포트 443을 사용할 때는 <port>를 생략해야 합니다. 웹사이트 타겟은 루트 도메인만 될 수 있으며 특정 하위 디렉터리로 제한할 수 없습니다. 이 루트 아래의 모든 디렉터리가 일치합니다. 하위 도메인은 일치하는 것으로 간주하지 않습니다. 즉, 문장 파일이 www.example.com에 호스팅된 경우 www.puppies.example.com은 일치하는 것으로 간주하지 않습니다. 웹사이트 타겟 매칭에 관한 규칙과 예시는 타겟 문서를 참고하세요. 예:http://www.example.com
앱에 Play 앱 서명을 사용 중인 경우 로컬에서 keytool 또는 openssl를 실행하여 생성된 인증서 지문은 일반적으로 사용자 기기의 인증서 지문과 일치하지 않습니다. Play Console 개발자 계정의 Release > Setup > App Integrity에서 앱에 Play 앱 서명을 사용하고 있는지 확인할 수 있습니다. 사용하고 있다면 같은 페이지에서 앱에 적합한 디지털 애셋 링크 JSON 스니펫도 확인할 수 있습니다.
relation_extensions (선택사항)
선택사항인 relation_extensions 필드를 문에 추가하여 부여하려는 권한 및 연결에 관한 자세한 정보를 제공할 수 있습니다. 이 필드는 각 키가 관계 문자열이고 값이 해당 관계의 확장 프로그램을 포함하는 객체인 객체여야 합니다. 이러한 명세서를 요청하는 클라이언트는 이러한 필드를 준수하도록 업데이트해야 합니다.
예를 들어 delegate_permission/common.handle_all_urls 관계의 relation_extensions는 다음과 같을 수 있습니다.
경우에 따라 주 구성원이 여러 타겟에 관해 다양한 문을 작성할 수 있으며, 여러 주 구성원이 동일한 타겟 집합에 관해 문을 발급해야 할 수도 있습니다. 예를 들어 웹사이트가 여러 국가별 최상위 도메인에서 제공될 수 있으며, 이들 모두 동일한 모바일 앱에 관한 설명을 제공할 수 있습니다.
이러한 상황에서는 include statements가 유용할 수 있습니다.
이 메커니즘을 사용하면 여러 주체에서 모든 주체의 명령문을 정의하는 하나의 중앙 위치로 포인터를 설정할 수 있습니다.
예를 들어 중앙 위치가 `https://example.com/includedstatements.json`이라고 결정할 수 있습니다. 이 파일은 위의 예와 동일한 콘텐츠를 포함하도록 구성할 수 있습니다.
웹사이트에서 include 파일로 포인터를 설정하려면 `https://example.com/.well-known/assetlinks.json` 을 다음과 같이 변경합니다.
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-09-09(UTC)"],[[["\u003cp\u003eA statement list is a JSON file that describes relationships between websites and Android apps, used for features like Digital Asset Links.\u003c/p\u003e\n"],["\u003cp\u003eThe list consists of statements with "relation" and "target" fields, where "target" can be a website or an Android app.\u003c/p\u003e\n"],["\u003cp\u003eWebsite targets are specified using a "site" field with a URL, while Android app targets use "package_name" and "sha256_cert_fingerprints".\u003c/p\u003e\n"],["\u003cp\u003eFor many statements, use "include" to point to a central file to avoid redundancy and simplify management.\u003c/p\u003e\n"],["\u003cp\u003eDetailed syntax and examples are provided to guide you in creating and using statement lists effectively.\u003c/p\u003e\n"]]],[],null,["A statement list is a [JSON-encoded](http://json.org/) file or snippet in a well-known location.\n\nLocation of statement list\n\nSee [Creating a statement list](/digital-asset-links/v1/create-statement) to learn where this list should be stored.\n\nSyntax\n\nThe statement list or snippet consists of\na 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: \n\n```\n[\n {\n \"relation\": [\"relation_string\"],\n \"target\": {target_object}\n } , ...\n]\n```\n\nrelation\n: An array of one or more strings that describe the relation being declared about the target. See the list of [defined relation strings](/digital-asset-links/v1/relation-strings). **Example:** `delegate_permission/common.handle_all_urls`\n\ntarget\n: The target asset to whom this statement applies. Available target types:\n\n - **Website target** \n\n ```javascript\n \"target\": {\n \"namespace\": \"web\",\n \"site\": \"\u003cvar translate=\"no\"\u003esite_root_url\u003c/var\u003e\"\n }\n ```\n\n namespace\n : Must be `web` for websites.\n\n site\n : URI of the site that is the target of the statement, in the format `http[s]://\u003c`\u003cvar translate=\"no\"\u003ehostname\u003c/var\u003e`\u003e[:\u003c`\u003cvar translate=\"no\"\u003eport\u003c/var\u003e`\u003e]`, where \u003cvar translate=\"no\"\u003e<hostname>\u003c/var\u003e is fully-qualified, and \u003cvar translate=\"no\"\u003e<port>\u003c/var\u003e must be omitted when using port 80 for HTTP, or port 443 for HTTPS. A website target can only be a root domain; you cannot limit to a specific subdirectory; all directories under this root will match. Subdomains should not be considered to match: that is, if the statement file is hosted on www.example.com, then www.puppies.example.com should not be considered a match. For rules and examples about website target matching, see [the targets documentation](/digital-asset-links/v1/create-statement#targets). **Example:** `http://www.example.com`\n - **Android app target** \n\n ```javascript\n \"target\": {\n \"namespace\": \"android_app\",\n \"package_name\": \"\u003cvar translate=\"no\"\u003efully_qualified_package_name\u003c/var\u003e\",\n \"sha256_cert_fingerprints\": [\"\u003cvar translate=\"no\"\u003ecert_fingerprint\u003c/var\u003e\"]\n }\n ```\n\n namespace\n : Must be `android_app` for Android apps.\n\n package_name\n : The fully-qualified package name of the app that this statement applies to. **Example:** `com.google.android.apps.maps`\n\n sha256_cert_fingerprints\n : The **uppercase SHA265 fingerprint** of the certificate for the app that this\n statement applies to. You can compute this using [`\n openssl`](https://www.openssl.org/) or Java `keytool` as shown here:\n - `openssl x509 -in $CERTFILE -noout -fingerprint -sha256`\n - `keytool -printcert -file $CERTFILE | grep SHA256`\n\n\n **Example:** `[\"14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5\"]`.\n\n If you're using [Play App Signing](https://support.google.com/googleplay/android-developer/answer/9842756)\n for your app, then the certificate fingerprint produced by running `keytool`\n or `openssl` locally usually doesn't match the one on\n users' devices. You can verify whether you're using Play App Signing for your app in your\n [Play Console](https://play.google.com/console/) developer account\n under **Release \\\u003e Setup \\\u003e App Integrity**; if you do,\n then you'll also find the correct Digital Asset Links JSON snippet for your app on the same\n page.\n\nrelation_extensions (optional)\n\n: 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.\n\n For example, `relation_extensions` for the `delegate_permission/common.handle_all_urls` relation may look like: \n\n ```javascript\n {\n \"relation\": [\"delegate_permission/common.handle_all_urls\"],\n \"target\": {\n \"namespace\": \"android_app\",\n \"package_name\": \"com.example.app\",\n \"sha256_cert_fingerprints\": [\"...\"]\n },\n \"relation_extensions\": {\n \"delegate_permission/common.handle_all_urls\": {...}\n }\n }\n \n ```\n\n The DAL API supports returning relation_extensions in API calls when the `return_relation_extensions=true` parameter is set in the request.\n\nExample statement list\n\nHere is an example website statement list that contains statements about both websites and apps: \u003chttp://example.digitalassetlinks.org/.well-known/assetlinks.json\u003e\n\nScaling to dozens of statements or more\n\nIn some cases, a principal might want to make many different statements\nabout different targets, or there might be a need to issue statements from\ndifferent principals to the same set of targets. For example, a website may\nbe available on many different per-country Top Level Domains, and all of them\nmay want to make a statement about the same mobile app.\n\nFor these situations, **include statements** can be helpful.\nUsing this mechanism, you can set up pointers from many different principals to\none central location, which defines statements for all of the principals.\n| **Note:** A maximum of 10 include statements are allowed in a complete statement list tree. This means that the maximum number of files in the tree is: (10 included statement files) + (the root statement file) = 11 total.\n\nFor example, you might decide that the central location\nshould be \\`https://example.com/includedstatements.json\\`. This file can be\nconfigured to contain the same content as in the examples above.\n\nTo set up a pointer from a **web site** to the include file,\nchange \\`https://example.com/.well-known/assetlinks.json\\` to: \n\n```text\n[{\n \"include\": \"https://example.com/includedstatements.json\"\n}]\n```\n\nTo set up a pointer from an **Android app** to the include\nfile, change \\`res/values/strings.xml\\` to: \n\n```scdoc\n\u003cresources\u003e\n ...\n \u003cstring name=\"asset_statements\"\u003e\n [{\n \\\"include\\\": \\\"https://example.com/includedstatements.json\\\"\n }]\n \u003c/string\u003e\n\u003c/resources\u003e\n```\n\nMore Information\n\nThere is a more detailed explanation of the statement list format and the underlying concepts in our [specification document](https://github.com/google/digitalassetlinks/blob/master/well-known/details.md)."]]