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á JSON ở một vị trí phổ biến trên một tên chính, như được xác định trong Thông số kỹ thuật liên kết tài sản. Danh sách câu lệnh chứa một hoặc nhiều câu lệnh và hiệu suất 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í danh sách câu lệnh

Danh sách câu lệnh được lưu trữ ở một vị trí nổi tiếng tùy thuộc vào loại chính (trang web hoặc ứng dụng tạo câu lệnh).

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

Trên trang web, danh sách câu lệnh là tệp văn bản được đặt tại địa chỉ sau:

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

Vui lòng 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à một lỗi và sẽ tạo ra một danh sách câu lệnh trống. Đối với HTTPS, mọi đường kết nối không có chuỗi chứng chỉ có thể được xác minh bằng danh sách gốc đáng tin cậy cũng sẽ dẫn đến một danh sách câu lệnh trống.

Ví dụ

Sau đây là ví dụ về danh sách tuyên bố trên một trang web: http://example.digitalassetlinks.org/.well-known/assetlinks.json

Danh sách câu lệnh ứ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ú pháp giống như tệp câu lệnh cho trang web, nhưng được nhúng trong tệp strings.xml và được tham chiếu trong tệp kê khai như hiển thị 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à ví dụ về đoạn mã res/values/strings.xml cho ứng dụng Android hỗ trợ chia sẻ vị trí với ứng dụng này (tính năng 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 với mục tiêu

Mỗi câu lệnh đều là về một mục tiêu. Khi tiêu thụ một câu lệnh, bạn phải so khớp mục tiêu trong một câu lệnh với thực thể nào đó. Nếu mục tiêu câu lệnh khớp với mục, 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 của trang web

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

Ví dụ

Cho biết mục tiêu của tuyên bố sau

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

Các URI sau 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.vn/

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

  • http://www.google.com/ (Lược đồ không chính xá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 của 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.