Tạo danh sách câu lệnh

Các câu lệnh được lưu trữ trong danh sách câu lệnh được mã hoá bằng JSON ở một vị trí đã biết trên một thực thể chính, theo quy định của Quy cách về đường liên kết đến tài sản. Danh sách câu lệnh chứa một hoặc nhiều câu lệnh và một đối tượng chính chỉ có thể có một danh sách câu lệnh.

Cú pháp danh sách câu lệnh

Xem cú pháp danh sách câu lệnh.

Vị trí của danh sách câu lệnh

Danh sách tuyên bố được lưu trữ ở một vị trí nổi tiếng, tuỳ thuộc vào loại chủ thể (trang web hoặc ứng dụng đưa ra tuyên bố).

Danh sách tuyên bố trên trang web

Trên một trang web, danh sách câu lệnh là một tệp văn bản nằm ở địa chỉ sau:

scheme://domain/.well-known/assetlinks.json

Lưu ý dấu chấm trong tên thư mục .well-known.

Mọi phản hồi từ máy chủ ngoài HTTP 200 đều được coi là lỗi và sẽ dẫn đến danh sách câu lệnh trống. Đối với HTTPS, mọi kết nối không có chuỗi chứng chỉ có thể xác minh bằng danh sách gốc đáng tin cậy cũng sẽ dẫn đến danh sách câu lệnh trống.

Ví dụ

Dưới đây là một ví dụ về danh sách câu lệnh trên một trang web: http://example.digitalassetlinks.org/.well-known/assetlinks.json

Danh sách tuyên bố của ứng dụng Android

Trong một ứng dụng Android, danh sách câu lệnh là một đoạn mã JSON có cùng cú pháp như tệp câu lệnh của trang web, nhưng được nhúng trong tệp strings.xml và được tham chiếu trong tệp kê khai như minh hoạ ở phần tiếp theo.

Trong AndroidManifest.xml:

<manifest>
  <application>
    ...
    <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
    ...
  </application>
</manifest>

Trong res/values/strings.xml:

<resources>
  ...
  <string name="asset_statements">
    ... statement list ...
  </string>
</resources>

Ví dụ

Dưới đây là một ví dụ về đoạn mã res/values/strings.xml cho một ứng dụng Android hỗ trợ tính năng chia sẻ vị trí với ứng dụng (một tính năng của Android hiện không được hỗ trợ):

<resources>
    ...
    <string name="asset_statements">
      [{
        \"relation\": [\"delegate_permission/common.share_location\"],
        \"target\": {
          \"namespace\": \"web\",
          \"site\": \"https://example.com\"
        }
      }]
    </string>
</resources>

Khớp mục tiêu

Mỗi câu lệnh đều liên quan đến một mục tiêu. Khi sử dụng một câu lệnh, bạn phải so khớp mục tiêu trong câu lệnh với một thực thể nào đó trong thực tế. Nếu mục tiêu của câu lệnh khớp với thực thể, thì câu lệnh sẽ áp dụng. Dưới đây là các quy tắc để xác định xem một mục tiêu có khớp với một thực thể nhất định hay không:

Mục tiêu trên trang web

Đối với một trang web, lược đồ, máy chủ và cổng của trang web phải hoàn toàn khớp. Các cổng mặc định cho HTTP và HTTPS (lần lượt là 80 và 443) được giả định một cách ngầm ẩn; nếu mục tiêu của câu lệnh mô tả http://www.example.com:80, thì trang web http://www.example.com được coi là một kết quả trùng khớp.

Ví dụ

Cho trước mục tiêu của câu lệnh sau

"target": {
  "namespace": "web",
  "site": "https://www.google.com"
}

Các URI sau đây SẼ khớp:

  • 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/

Các URL sau đây sẽ KHÔNG khớp:

  • http://www.google.com/ (Sai lược đồ)
  • https://google.com/ (Tên máy chủ lưu trữ không khớp)
  • https://www.google.com:444/ (Cổng không khớp)

Mục tiêu ứng dụng

Đối với một ứng dụng, hàm băm chứng chỉ và tên gói của mục tiêu phải khớp chính xác với ứng dụng.