Để hỗ trợ Đường liên kết trong ứng dụng, bạn phải tạo một tệp JSON
chứa Đường liên kết đến tài sản kỹ thuật số có tên là assetlinks.json và phát hành tệp này ở một vị trí quen thuộc trên
trang web của bạn. Tệp này công khai khai báo những ứng dụng được phép xử lý đường liên kết cho miền của bạn và thiết bị Android sẽ truy xuất tệp này từ máy chủ của bạn để xác minh đường liên kết sâu.
Đối với Đường liên kết động trong ứng dụng trên Android 15 trở lên, tệp assetlinks.json cũng là
nơi bạn xác định cấu hình quy tắc động, chẳng hạn như trình so khớp mẫu
cho đường dẫn, đoạn và tham số truy vấn. Các thiết bị Android chạy Android 15 (cấp độ API 35) trở lên đã cài đặt các dịch vụ của Google sẽ định kỳ truy xuất tệp này và hợp nhất cấu hình động của bạn với cấu hình tĩnh trong tệp kê khai của ứng dụng.
Hướng dẫn này mô tả cách chuẩn bị tệp assetlinks.json và phát hành tệp đó trên trang web của bạn. Nếu muốn, bạn có thể tạo tệp assetlinks.json từ công cụ Đường liên kết sâu của Play hoặc Trợ lý App Links trong Android Studio.
Để biết thêm thông tin, hãy xem Công cụ cho nhà phát triển về Đường liên kết trong ứng dụng.
Khai báo mối liên kết với trang web
Bạn phải phát hành một tệp JSON chứa Đường liên kết đến tài sản kỹ thuật số trên trang web của mình để cho biết các ứng dụng Android được liên kết với trang web và xác minh ý định URL của ứng dụng. Tệp JSON sử dụng các trường sau đây để xác định các ứng dụng được liên kết:
package_name: Mã ứng dụng được khai báo trongbuild.gradletệp của ứng dụng.sha256_cert_fingerprints: Các vân tay số SHA256 trong chứng chỉ ký của ứng dụng. Bạn có thể sử dụng lệnh sau đây để tạo vân tay số bằng keytool Java:
keytool -list -v -keystore my-release-key.keystore
- Trường này hỗ trợ nhiều vân tay số. Bạn có thể dùng các vân tay số này để hỗ trợ nhiều phiên bản của ứng dụng, chẳng hạn như bản dựng gỡ lỗi và bản dựng chính thức. Nếu bạn đang
dùng Tính năng ký ứng dụng của Play cho ứng dụng, thì vân tay số của chứng chỉ do việc chạy
keytoolcục bộ tạo ra thường không khớp với vân tay số trên thiết bị của người dùng. Bạn có thể xác minh xem mình có đang dùng Tính năng ký ứng dụng của Play cho ứng dụng hay không trong tài khoản nhà phát triển trên Play Console ở phầnRelease > Setup > App signing. Nếu có, bạn cũng sẽ thấy đoạn mã JSON chính xác của Đường liên kết đến tài sản kỹ thuật số cho ứng dụng của mình trên cùng một trang.
Tệp assetlinks.json sau đây cấp quyền mở đường liên kết cho ứng dụng Android com.example:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example",
"sha256_cert_fingerprints":
["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"]
}
}]
Liên kết một trang web với nhiều ứng dụng
Một trang web có thể khai báo mối liên kết với nhiều ứng dụng trong cùng một tệp assetlinks.json. Danh sách tệp sau đây cho thấy ví dụ về tệp câu lệnh khai báo mối liên kết với 2 ứng dụng riêng biệt và nằm tại https://www.example.com/.well-known/assetlinks.json:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.puppies.app",
"sha256_cert_fingerprints":
["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"]
}
},
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.monkeys.app",
"sha256_cert_fingerprints":
["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"]
}
}]
Các ứng dụng khác nhau có thể xử lý đường liên kết cho các tài nguyên khác nhau trong cùng một máy chủ web.
Ví dụ: ứng dụng 1 có thể khai báo bộ lọc ý định cho https://example.com/articles và ứng dụng 2 có thể khai báo bộ lọc ý định cho https://example.com/videos.
Liên kết nhiều trang web với một ứng dụng
Nhiều trang web có thể khai báo mối liên kết với cùng một ứng dụng trong các tệp assetlinks.json tương ứng. Danh sách tệp sau đây cho thấy ví dụ về cách khai báo mối liên kết của example.com và example.net với ứng dụng 1. Danh sách đầu tiên cho thấy mối liên kết của example.com với ứng dụng 1:
https://www.example.com/.well-known/assetlinks.json
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.mycompany.app1",
"sha256_cert_fingerprints":
["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"]
}
}]
Danh sách tiếp theo cho thấy mối liên kết của example.net với ứng dụng 1. Chỉ vị trí lưu trữ các tệp này là khác nhau (.com và .net):
https://www.example.net/.well-known/assetlinks.json
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.mycompany.app1",
"sha256_cert_fingerprints":
["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"]
}
}]
Định cấu hình quy tắc động
Đường liên kết động trong ứng dụng trên Android 15 trở lên cho phép bạn sử dụng các quy tắc so khớp đường liên kết sâu phía máy chủ. Các quy tắc này hoạt động cùng với các quy tắc mà bạn đã xác định tĩnh trong tệp kê khai của ứng dụng. Tệp assetlinks.json là nơi bạn xác định các quy tắc động. Bạn có thể chọn thêm tệp này.
Các thiết bị Android chạy Android 15 (cấp độ API 35) trở lên đã cài đặt các dịch vụ của Google sẽ định kỳ truy xuất tệp này từ máy chủ của bạn và hợp nhất cấu hình quy tắc động của bạn với cấu hình tĩnh trong tệp kê khai của ứng dụng. Sau đây là ví dụ về tệp assetlinks.json có các quy tắc động:
[
{
"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": {
"dynamic_app_link_components": [
{"?": {"dl": "*"}},
{"#": "app"},
{"/": "/products/*"},
{"/": "/shoes", "?": {"in_app": "true"}},
{"/": "*", "exclude": true}
]
}
}
}
]
Các điểm chính về mã
- Đường liên kết động trong ứng dụng thêm một tiện ích mới cho mối liên kết Digital Asset Links có tên là
dynamic_app_link_components. Đây là nơi bạn định cấu hình các quy tắc động. - Các quy tắc động có thể bao gồm trình so khớp mẫu cho đường dẫn, đoạn và tham số truy vấn.
- Bạn cũng có thể đánh dấu mọi trình so khớp mẫu là bị loại trừ để các URL phù hợp không mở ứng dụng của bạn.
- Ví dụ này cho thấy các ví dụ về trình so khớp cho đường dẫn (
"/"), đoạn ("#"), tham số truy vấn ("?") và cả trình so khớp bị loại trừ ("exclude") - Nếu bất kỳ trường nào trong tệp bị lỗi hoặc trống, thì Android sẽ loại bỏ các quy tắc động và thiết bị sẽ quay lại các quy tắc được xác định tĩnh trong tệp kê khai của ứng dụng.
Các quy tắc động chỉ có thể chỉ định các quy tắc áp dụng trong phạm vi của các miền mà bạn khai báo trong tệp kê khai của ứng dụng. Hãy xem phần Khai báo quy tắc động.
Khai báo quy tắc động
Đường liên kết động trong ứng dụng hỗ trợ một tiện ích mới cho mối liên kết dynamic_app_link_components. Tiện ích này chứa một mảng các đối tượng quy tắc. Mỗi quy tắc được xác định bằng cách sử dụng trình so khớp mẫu cho đường dẫn, đoạn và tham số truy vấn sẽ mở ứng dụng của bạn. Bạn cũng có thể loại trừ từng trình so khớp để chúng không mở ứng dụng của bạn. Tất cả các trình so khớp này đều không bắt buộc.
- So khớp đường dẫn
- Khoá: "/"
- Giá trị: Chuỗi đơn, biểu thức so khớp cho đường dẫn URL
- So khớp đoạn
- Khoá: "#"
- Giá trị: Chuỗi đơn, biểu thức so khớp cho phân mảnh của URL
- So khớp tham số truy vấn
- Khoá: "?"
- Giá trị: Từ điển để so khớp các cặp khoá/giá trị trong tham số truy vấn URL.
- Ví dụ: từ điển {"
?", {"dl": "*", "in_app":"true"} sẽ so khớp chuỗi truy vấn "?in_app=true&dl=abc". - Thứ tự của các cặp khoá/giá trị trong từ điển không cần khớp với thứ tự của các cặp trong chuỗi truy vấn. Ngoài ra, từ điển không cần khớp với tất cả các cặp khoá/giá trị trong chuỗi truy vấn, nhưng phải tìm thấy kết quả so khớp cho mọi mục trong từ điển.
- Ví dụ: từ điển cũng sẽ so khớp chuỗi truy vấn
"
?lang=en&in_app=true&tz=pst&dl=abc", nhưng không so khớp chuỗi truy vấn "?lang=en&tz=pst&dl=abc"
- Bị loại trừ
- Khoá: "exclude"
- Giá trị: Giá trị true/false không bắt buộc cho từng quy tắc được xác định trong
dynamic_app_link_components(xem ví dụ).
Bạn có thể sử dụng các ký tự đặc biệt sau đây trong trình so khớp mẫu:
- "*" so khớp 0 hoặc nhiều ký tự cho đến khi tìm thấy ký tự sau ký tự đại diện trong mẫu trong chuỗi so khớp
- "?" so khớp mọi ký tự đơn
- "?*" so khớp 1 hoặc nhiều ký tự
Không có hạn chế nào khác về ký tự đối với giá trị.
Sắp xếp các quy tắc động
Thứ tự khai báo các quy tắc là rất quan trọng. Android đánh giá từng quy tắc theo thứ tự cho đến khi tìm thấy kết quả so khớp.
Ví dụ sau đây cho thấy cách sắp xếp có thể ảnh hưởng đến việc xử lý. Quy tắc đầu tiên so khớp tất cả các đường dẫn ("*") nhưng loại trừ các kết quả so khớp (exclude: true), nghĩa là quy tắc này loại trừ tất cả các URL khỏi việc mở ứng dụng. Trong trường hợp này, quy tắc thứ hai cho phép "/path1" sẽ không bao giờ được đánh giá.
dynamic_app_link_components: [
{"/": "*", "exclude": true},
{"/": "/path1"}
]
Tuy nhiên, trong ví dụ tiếp theo, quy tắc "/path1" được khai báo trước tiên, vì vậy, quy tắc này sẽ được đánh giá trước tiên và sẽ mở ứng dụng cho một URL so khớp "/path1". Quy tắc thứ hai (loại trừ tất cả các URL khỏi việc mở ứng dụng) sẽ được đánh giá thứ hai, nhưng chỉ khi quy tắc đầu tiên không phải là kết quả so khớp.
dynamic_app_link_components: [
{"/": "/path1"},
{"/": "*", "exclude": true}
]
Nếu không tìm thấy kết quả so khớp nào trong danh sách các thành phần được khai báo, thì URL sẽ không mở ứng dụng. Trong ví dụ sau đây, không có đường dẫn nào so khớp "/path3", vì vậy, thiết bị sẽ coi đường dẫn này là bị loại trừ.
dynamic_app_link_components: [
{"/": "/path1"},
{"/": "/path2"}
]
Hành vi này rất quan trọng nếu bạn chỉ muốn dynamic_app_link_components loại trừ một số phần URL nhưng cho phép tất cả các phần khác. Trong ví dụ sau đây, việc bỏ qua quy tắc cuối cùng để cho phép tất cả các đường dẫn còn lại sẽ có nghĩa là tất cả các URL đều bị loại trừ khỏi ứng dụng.
dynamic_app_link_components: [
{"/": "/path1", "exclude": true},
{"/": "*"}
]
Phạm vi thích hợp cho các quy tắc động
Khi xác định các quy tắc phía máy chủ để sử dụng với Đường liên kết ứng dụng động trong Android 15 trở lên, bạn cần xác định phạm vi thích hợp cho các quy tắc đó để chúng hoạt động và bổ sung cho các bộ lọc ý định tĩnh được khai báo trong tệp kê khai ứng dụng của bạn.
Các quy tắc động được khai báo trong tệp assetlinks.json chỉ có thể chỉ định các quy tắc cho những máy chủ mà bạn khai báo trong tệp AndroidManifest.xml của ứng dụng. Các quy tắc động không thể mở rộng phạm vi của các quy tắc URL mà bạn khai báo tĩnh trong tệp kê khai ứng dụng.
Vì lý do này, bạn nên sử dụng phương pháp này trên các quy tắc động và tĩnh:
- Trong tệp kê khai ứng dụng, hãy đặt các quy tắc có phạm vi rộng nhất có thể, chẳng hạn như chỉ khai báo lược đồ và miền
- Dựa vào các quy tắc động phía máy chủ để tinh chỉnh thêm, chẳng hạn như định tuyến ở cấp đường dẫn.
Với cấu hình lý tưởng này, bạn sẽ có thể linh hoạt thêm các đường dẫn mới cho App Link trong tệp assetlinks.json khi cần, biết rằng các đường dẫn đó sẽ nằm trong phạm vi rộng mà bạn đã đặt trong tệp kê khai ứng dụng.
Chỉ khai báo dynamic_app_link_components một lần
Để xử lý đúng các quy tắc, hãy chỉ khai báo một đối tượng dynamic_app_link_components trên các câu lệnh cho một trang web, mối liên kết và ứng dụng nhất định.
- Tìm nhiều câu lệnh cho cùng một trang web, mối liên kết và ứng dụng, khai báo một đối tượng dynamic_app_link_components.
- Tìm nhiều đối tượng dynamic_app_link_components được khai báo trong một câu lệnh
Trong những trường hợp như vậy, Android không đảm bảo cấu hình quy tắc động nào sẽ được sử dụng.
Khả năng tương thích của các quy tắc động với các cấu hình Đường liên kết trong ứng dụng trước đó
Nếu đã hỗ trợ Đường liên kết trong ứng dụng, bạn có thể thêm tính năng hỗ trợ Đường liên kết động trong ứng dụng ngay trong tệp assetlinks.json hiện có. Các trường mối liên kết để xác minh Đường liên kết trong ứng dụng vẫn giữ nguyên và bạn có thể thêm các trường tiện ích mới cho mối liên kết đối với các quy tắc động mà không cần thay đổi gì khác.
Các thiết bị Android chạy Android 14 (cấp độ API 34 trở xuống) sẽ bỏ qua các trường tiện ích mới cho mối liên kết đối với các quy tắc động, trong khi các thiết bị chạy Android 15 trở lên sẽ hợp nhất các quy tắc đó với các quy tắc do tệp kê khai xác định.
Phát hành tệp JSON xác minh
Bạn phải phát hành tệp JSON xác minh tại vị trí sau:
https://domain.name/.well-known/assetlinks.json
Hãy đảm bảo những điều sau:
- Tệp
assetlinks.jsonđược phân phát bằng loại nội dungapplication/json. - Tệp
assetlinks.jsonphải có thể truy cập được qua kết nối HTTPS, bất kể bộ lọc ý định của ứng dụng có khai báo HTTPS là lược đồ dữ liệu hay không. - Tệp
assetlinks.jsonphải có thể truy cập được mà không cần chuyển hướng (không có lệnh chuyển hướng 301 hoặc 302). - Nếu đường liên kết trong ứng dụng của bạn hỗ trợ nhiều miền máy chủ, thì bạn phải phát hành tệp
assetlinks.jsontrên từng miền. Xem bài viết Hỗ trợ liên kết ứng dụng cho nhiều máy chủ. - Đừng phát hành ứng dụng của bạn bằng các URL kiểm thử trong tệp kê khai mà công chúng có thể không truy cập được (chẳng hạn như bất kỳ URL nào chỉ có thể truy cập được bằng VPN). Trong những trường hợp như vậy, bạn có thể định cấu hình các biến thể bản dựng để tạo một tệp kê khai khác cho bản dựng dành cho nhà phát triển.
Xem các hướng dẫn liên quan sau đây:
- Tạo danh sách câu lệnh
- Trợ lý App Links trong Android Studio
- Công cụ cho nhà phát triển về Đường liên kết trong ứng dụng