Khi triển khai tính năng liên kết ứng dụng, bạn nên kiểm thử chức năng liên kết để đảm bảo hệ thống có thể liên kết ứng dụng với trang web của bạn và xử lý các yêu cầu URL như mong đợi.
Để kiểm thử một tệp khai báo hiện có, bạn có thể sử dụng công cụ Trình tạo và kiểm thử danh sách khai báo.
Các phần sau đây mô tả cách kiểm thử quy trình xác minh Đường liên kết trong ứng dụng theo cách thủ công. Nếu muốn, bạn có thể kiểm tra quy trình xác minh bằng công cụ Đường liên kết sâu của Play hoặc Trợ lý App Links của Android Studio.
Xác nhận danh sách máy chủ cần xác minh
Khi kiểm thử, bạn nên xác nhận danh sách các máy chủ liên kết mà hệ thống cần xác minh cho ứng dụng của bạn. Hãy lập danh sách tất cả URL có bộ lọc ý định tương ứng bao gồm các thuộc tính và phần tử sau:
- Thuộc tính
android:schemecó giá trị làhttphoặchttps - Thuộc tính
android:hostcó mẫu URL miền - Phần tử hành động
android.intent.action.VIEW - Phần tử danh mục
android.intent.category.BROWSABLE
Sử dụng danh sách này để kiểm tra xem tệp JSON chứa Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) có được cung cấp trên từng máy chủ lưu trữ và miền con được đặt tên hay không.
Xác nhận tệp Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số)
Đối với mỗi trang web, hãy sử dụng API Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) để xác nhận rằng tệp JSON chứa Digital Asset Links được lưu trữ và xác định đúng cách:
https://digitalassetlinks.googleapis.com/v1/statements:list?
source.web.site=https://<var>domain.name</var>:<var>optional_port</var>&
relation=delegate_permission/common.handle_all_urls
Đối với Đường liên kết động đến ứng dụng, bạn cũng có thể kiểm tra các phần mở rộng mối quan hệ.
https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://www.example.com&relation=delegate_permission/common.handle_all_urls&return_relation_extensions=true
Kiểm tra chính sách về đường liên kết
Trong quá trình kiểm thử, bạn có thể kiểm tra chế độ cài đặt hệ thống hiện tại để xử lý đường liên kết. Sử dụng lệnh sau để xem danh sách các chính sách xử lý đường liên kết hiện có cho tất cả ứng dụng trên thiết bị thông minh đã kết nối:
adb shell dumpsys package domain-preferred-apps
Lệnh sau đây cũng thực hiện điều tương tự:
adb shell dumpsys package d
Lệnh này trả về danh sách từng người dùng hoặc hồ sơ được xác định trên thiết bị, trước đó là tiêu đề theo định dạng sau:
App linkages for user 0:
Sau tiêu đề này, kết quả sẽ sử dụng định dạng sau để liệt kê các chế độ cài đặt xử lý đường liên kết cho người dùng đó:
Package: com.android.vending
Domains: play.google.com market.android.com
Status: always : 200000002
Danh sách này cho biết ứng dụng nào được liên kết với miền nào cho người dùng đó:
Package– Xác định một ứng dụng theo tên gói, như được khai báo trong tệp kê khai của ứng dụng.Domains– Cho thấy danh sách đầy đủ các máy chủ lưu trữ có đường liên kết trang web mà ứng dụng này xử lý, sử dụng dấu cách làm dấu phân tách.Status– Cho biết chế độ cài đặt xử lý đường liên kết hiện tại cho ứng dụng này. Ứng dụng đã vượt qua quy trình xác minh và có tệp kê khai chứaandroid:autoVerify="true"sẽ có trạng thái làalways. Số hệ thập lục phân sau trạng thái này liên quan đến bản ghi của hệ thống Android về lựa chọn ưu tiên của người dùng đối với việc liên kết ứng dụng. Giá trị này không cho biết liệu quá trình xác minh có thành công hay không.
Ví dụ về thử nghiệm
Để xác minh thành công đường liên kết ứng dụng, hệ thống phải xác minh được ứng dụng của bạn với từng trang web mà bạn chỉ định trong một bộ lọc ý định nhất định đáp ứng các tiêu chí cho đường liên kết ứng dụng. Ví dụ sau đây cho thấy cấu hình tệp kê khai có một số đường liên kết ứng dụng được xác định:
<activity android:name="MainActivity">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
<data android:scheme="https" />
<data android:host="www.example.com" />
<data android:host="mobile.example.com" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
<data android:host="www.example2.com" />
</intent-filter>
</activity>
<activity android:name="SecondActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
<data android:host="account.example.com" />
</intent-filter>
</activity>
<activity android:name="ThirdActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="https" />
<data android:host="map.example.com" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="market" />
<data android:host="example.com" />
</intent-filter>
</activity>
</application>
Danh sách máy chủ lưu trữ mà nền tảng sẽ cố gắng xác minh từ tệp kê khai trước đó là:
www.example.com
mobile.example.com
www.example2.com
account.example.com
Danh sách máy chủ lưu trữ mà nền tảng sẽ không cố gắng xác minh từ tệp kê khai trước đó là:
map.example.com (it does not have android.intent.category.BROWSABLE)
market://example.com (it does not have either an "http" or "https" scheme)
Để tìm hiểu thêm về danh sách câu lệnh, hãy xem phần Tạo danh sách câu lệnh.
Chẩn đoán việc phân giải đường liên kết bằng cờ debug-link
Kể từ Android 17, bạn có thể sử dụng cờ --debug-link cùng với lệnh của trình quản lý hoạt động (am start) để chẩn đoán cách hệ thống phân giải một URL cụ thể. Công cụ này cung cấp thông tin chi tiết về các ứng dụng đề xuất phù hợp với ý định, cùng với các quy tắc cụ thể trong tệp kê khai ứng dụng và tệp assetlinks.json (đối với Đường liên kết động đến ứng dụng) được đánh giá trong quá trình phân giải.
Để kiểm tra độ phân giải đường liên kết cho một URL cụ thể, hãy chạy lệnh sau trong cửa sổ dòng lệnh:
adb shell am start --debug-link -a android.intent.action.VIEW -d "https://xyz.com/foo"
Kết quả chẩn đoán được in dưới tiêu đề App Link Resolution Debug và chứa các phần sau đây để giúp bạn hiểu quy trình phân giải:
- Thông tin chi tiết về mục tiêu: Xác định từng ứng dụng đề xuất phù hợp theo tên gói và hoạt động mục tiêu.
- Kết quả khớp bộ lọc ý định (
AndroidManifest.xml): Cho biết thuộc tính tĩnh nào trong bộ lọc ý định của tệp kê khai (chẳng hạn nhưscheme,host,path,pathPrefixhoặcpathPattern) khớp với URI. - Xác minh đường liên kết đến ứng dụng: Cho biết trạng thái xác minh miền hiện tại (chẳng hạn như
STATE_SUCCESS). - Đường liên kết động trong ứng dụng: Nếu ứng dụng sử dụng các quy tắc so khớp Đường liên kết động trong ứng dụng trong tệp
assetlinks.json, thì phần này sẽ liệt kê mọi quy tắc được đánh giá dựa trên URI. Mỗi quy tắc cho biết các bộ lọc URI phù hợp (chẳng hạn như tiền tố hoặc mẫu đường dẫn) và một trườngallow:allow = 0: Quy tắc cho phép/bao gồm (allow: true). Nếu quy tắc này khớp, ứng dụng sẽ được phép mở URI.allow = 1: Quy tắc chặn/loại trừ (allow: false/exclude: true). Nếu quy tắc này khớp, ứng dụng sẽ không thể mở URI.- Lưu ý: Chuỗi bộ lọc trống (
filter =) cho biết tiền tố đường dẫn trống khớp với tất cả đường dẫn trong miền (đóng vai trò là ký tự đại diện hoặc quy tắc chung).
Ví dụ về kết quả gỡ lỗi
Hãy xem xét một ứng dụng (com.example.xyzapp) liên kết với miền https://xyz.com xác định các quy tắc linh động trong tệp assetlinks.json để loại trừ /foo* trong khi cho phép tất cả các đường dẫn khác:
[
{
"relation": [
"delegate_permission/common.handle_all_urls"
],
"target": {
"namespace": "android_app",
"package_name": "com.example.xyzapp",
"sha256_cert_fingerprints": ["..."]
},
"relation_extensions": {
"delegate_permission/common.handle_all_urls": {
"dynamic_app_link_components": [
{"/": "/foo*", "exclude": true},
{"/": "*"}
]
}
}
}
]
Khi chẩn đoán URL https://xyz.com/foo bằng --debug-link:
adb shell am start --debug-link -a android.intent.action.VIEW -d "https://xyz.com/foo"
Lệnh này sẽ đưa ra thông tin chi tiết về kết quả chẩn đoán sau:
--- App Link Resolution Debug ---
URI: https://xyz.com/foo
Resolution: Ambiguous (Multiple apps or Browser fallback)
This usually happens when multiple apps can handle the link and no default is set.
All Matching Candidates:
Target:
Package: com.example.xyzapp
Activity: com.example.xyzapp.MainActivity
Intent Filter Match (AndroidManifest.xml)
Scheme: 'https' matched android:scheme="https"
Host: 'xyz.com' matched android:host="xyz.com"
App Link Verification:
Verification status: STATE_SUCCESS
Dynamic App Links:
-> Matched Rule 0: UriRelativeFilterGroup { allow = 1, uri_filters = {UriRelativeFilter { uriPart = PATH, patternType = PREFIX, filter = /foo }}, }
-> Matched Rule 1: UriRelativeFilterGroup { allow = 0, uri_filters = {UriRelativeFilter { uriPart = PATH, patternType = PREFIX, filter = }}, }
Target:
Package: org.chromium.webview_shell
Activity: org.chromium.webview_shell.WebViewBrowserActivity
Intent Filter Match (AndroidManifest.xml)
Scheme: 'https' matched android:scheme="https"
---------------------------------
Starting: Intent { act=android.intent.action.VIEW dat=https://xyz.com/foo }
Trong ví dụ này, hệ thống đã đánh giá hai quy tắc Đường liên kết động trong ứng dụng từ assetlinks.json:
- Quy tắc 0 (
allow = 1,filter = /foo): Được tạo từ{"/": "/foo*", "exclude": true}, đây là quy tắc loại trừ (allow: false) chặn các URL bắt đầu bằng tiền tố đường dẫn/foo. - Quy tắc 1 (
allow = 0,filter =): Được tạo từ{"/": "*"}, đây là một quy tắc thêm (allow: true) có tiền tố đường dẫn trống (filter =), khớp với tất cả đường dẫn trongxyz.com(quy tắc chung).
Cách giải quyết trong trường hợp này:
- Cả Quy tắc 0 và Quy tắc 1 đều khớp với URL
https://xyz.com/foo. - Các quy tắc về Đường liên kết động đến ứng dụng được đánh giá theo thứ tự tuần tự từ trên xuống dưới (quy tắc khớp đầu tiên sẽ được áp dụng).
- Vì Quy tắc 0 xuất hiện đầu tiên trong danh sách câu lệnh và là quy tắc loại trừ (
allow = 1), nên quy tắc này được ưu tiên hơn quy tắc cho phép chung (Quy tắc 1). - Do đó, ứng dụng bị loại trừ khỏi việc xử lý
https://xyz.com/foo, khiến hệ thống quay lại trình duyệt hoặc hiển thị hộp thoại phân định.