Đường liên kết trong ứng dụng Android là một loại đường liên kết sâu đặc biệt cho phép URL của trang web để mở ngay nội dung tương ứng trong ứng dụng Android của bạn mà không yêu cầu người dùng chọn ứng dụng. Đường liên kết trong ứng dụng Android sử dụng Tài sản kỹ thuật số Liên kết API để tạo dựng niềm tin ứng dụng của bạn đã được trang web phê duyệt để tự động mở đường liên kết miền đó. Nếu hệ thống xác minh thành công rằng bạn sở hữu các URL đó, tự động định tuyến các ý định URL đó đến ứng dụng của bạn.
Để xác minh rằng bạn sở hữu cả ứng dụng và URL của trang web, hãy hoàn tất các bước sau:
Thêm bộ lọc ý định chứa
autoVerify
. Thuộc tính này báo hiệu cho hệ thống rằng cần xác minh xem ứng dụng của bạn thuộc miền URL dùng trong bộ lọc ý định.Khai báo mối liên kết giữa trang web và ý định của bạn bằng cách lưu trữ tệp JSON chứa Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) tại vị trí sau:
https://domain.name/.well-known/assetlinks.json
Bạn có thể tìm thấy thông tin liên quan trong các tài nguyên sau:
Thêm bộ lọc ý định để xác minh đường liên kết đến ứng dụng
Để bật tính năng xác minh cách xử lý đường liên kết cho ứng dụng của bạn, hãy thêm bộ lọc ý định phù hợp dưới định dạng sau:
<!-- Make sure you explicitly set android:autoVerify to "true". -->
<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" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
Mặc dù chỉ cần đưa autoVerify
vào một <intent-filter>
là đủ
cho từng máy chủ lưu trữ, ngay cả khi máy chủ đó được sử dụng trên các máy chủ khác không được đánh dấu
bạn nên thêm autoVerify
vào mỗi phần khai báo
Phần tử <intent-filter>
để đảm bảo tính nhất quán. Điều này cũng đảm bảo rằng, sau khi
xoá hoặc tái cấu trúc các phần tử trong tệp kê khai, ứng dụng của bạn vẫn sẽ được liên kết
với tất cả các miền mà bạn vẫn xác định.
Quá trình xác minh miền cần có kết nối Internet và có thể mất
mất một khoảng thời gian để hoàn thành. Để giúp cải thiện hiệu quả của quy trình, hệ thống
xác minh miền cho một ứng dụng nhắm đến Android 12 trở lên
chỉ khi miền đó nằm trong phần tử <intent-filter>
có chứa
định dạng chính xác được chỉ định trong đoạn mã trước đó.
Hỗ trợ tính năng liên kết ứng dụng cho nhiều máy chủ
Hệ thống phải xác minh được máy chủ lưu trữ được chỉ định trong dữ liệu của bộ lọc ý định URL của ứng dụng dựa trên các tệp Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) được lưu trữ trên các miền web tương ứng tại bộ lọc ý định. Nếu quá trình xác minh không thành công, thì theo mặc định, hệ thống sẽ hoạt động chuẩn để phân giải ý định, như được mô tả trong Tạo đường liên kết sâu đến nội dung ứng dụng. Tuy nhiên, ứng dụng vẫn có thể được xác minh là trình xử lý mặc định cho mọi mẫu URL được xác định trong các bộ lọc ý định khác của ứng dụng.
Lưu ý: Trên Android 11 (API cấp 30) trở xuống, hệ thống không xác minh ứng dụng của bạn là trình xử lý mặc định trừ phi ứng dụng tìm thấy một trình xử lý phù hợp Tệp Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) cho tất cả máy chủ lưu trữ mà bạn xác định trong tệp kê khai.
Ví dụ: một ứng dụng có ý định sau đây
sẽ chỉ vượt qua quy trình xác minh cho https://www.example.com
nếu tệp assetlinks.json
được tìm thấy tại
https://www.example.com/.well-known/assetlinks.json
nhưng không
https://www.example.net/.well-known/assetlinks.json
:
<application> <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="http" /> <data android:scheme="https" /> <data android:host="www.example.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="www.example.net" /> </intent-filter> </activity> </application>
Lưu ý: Tất cả phần tử <data>
trong cùng một bộ lọc ý định
được hợp nhất với nhau để tính đến tất cả biến thể của các thuộc tính kết hợp của chúng. Ví dụ:
bộ lọc ý định đầu tiên ở trên bao gồm phần tử <data>
chỉ khai báo
Giao thức HTTPS. Tuy nhiên, phần tử này được kết hợp với phần tử <data>
khác để ý định
bộ lọc hỗ trợ cả http://www.example.com
và https://www.example.com
.
Do đó, bạn phải tạo các bộ lọc ý định riêng biệt khi muốn xác định các kiểu kết hợp cụ thể
của giao thức và miền URI.
Hỗ trợ liên kết ứng dụng cho nhiều miền con
Giao thức Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) coi các miền con trong bộ lọc ý định là duy nhất,
máy chủ riêng biệt. Vì vậy, nếu ý định của bạn
bộ lọc liệt kê nhiều máy chủ lưu trữ có miền con khác nhau, bạn phải xuất bản tệp hợp lệ
assetlinks.json
trên mỗi miền. Ví dụ:
bộ lọc ý định sau đây bao gồm www.example.com
và
mobile.example.com
làm máy chủ lưu trữ URL ý định được chấp nhận. Vì vậy, một tham số hợp lệ
assetlinks.json
phải được xuất bản ở cả
https://www.example.com/.well-known/assetlinks.json
và
https://mobile.example.com/.well-known/assetlinks.json
.
<application> <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> </activity> </application>
Ngoài ra, nếu bạn khai báo tên máy chủ bằng một ký tự đại diện (chẳng hạn như *.example.com
),
bạn phải xuất bản tệp assetlinks.json
của mình tại tên máy chủ gốc
(example.com
). Ví dụ: một ứng dụng có bộ lọc ý định như sau sẽ chuyển
quy trình xác minh cho bất kỳ tên phụ nào của example.com
(chẳng hạn như foo.example.com
) như
miễn là tệp assetlinks.json
được xuất bản vào
https://example.com/.well-known/assetlinks.json
:
<application> <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:host="*.example.com" /> </intent-filter> </activity> </application>
Kiểm tra nhiều ứng dụng liên kết với cùng một miền
Nếu bạn xuất bản nhiều ứng dụng, trong đó mỗi ứng dụng được liên kết với cùng một miền, thì các ứng dụng đó đều có thể được xác minh thành công. Tuy nhiên, nếu ứng dụng có thể giải quyết chính xác lỗi cùng một đường dẫn và máy chủ lưu trữ miền, giống như trường hợp với phiên bản phiên bản rút gọn và đầy đủ của ứng dụng mà chỉ ứng dụng được cài đặt gần đây nhất mới có thể giải quyết ý định trên web cho miền đó.
Trong trường hợp này, hãy kiểm tra các ứng dụng có khả năng gây xung đột trên thiết bị của người dùng,
miễn là bạn có gói
khả năng hiển thị. Sau đó, trong ứng dụng của bạn, hãy hiển thị một biểu tượng tuỳ chỉnh
hộp thoại bộ chọn chứa kết quả từ việc gọi
queryIntentActivities()
.
Người dùng có thể chọn ứng dụng mà họ muốn trong danh sách các ứng dụng phù hợp mà
sẽ xuất hiện trong hộp thoại.
Khai báo mối liên kết với trang web
Tài sản kỹ thuật số Bạn phải xuất bản tệp JSON chứa các đường liên kết 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 dùng các trường sau để xác định các ứng dụng được liên kết:
package_name
: Mã ứng dụng đã khai báo trong tệpbuild.gradle
của ứng dụng.sha256_cert_fingerprints
: Tệp tham chiếu SHA256 của chứng chỉ ký của ứng dụng. Bạn có thể dùng lệnh sau để tạo vân tay số thông qua keytool trong Java: Trường này hỗ trợ nhiều vân tay số có thể dùng để hỗ trợ các phiên bản khác nhau của ứng dụng, chẳng hạn như bản gỡ lỗi và bản dựng chính thức.keytool -list -v -keystore my-release-key.keystore
Nếu bạn đang sử dụng Tính năng ký ứng dụng của Play cho ứng dụng, thì chứng chỉ vân tay số được tạo ra bằng cách chạy
keytool
cục bộ sẽ thường không khớp với thông tin trên trang web của người dùng thiết bị. 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 của bạn trong tài khoản nhà phát triển trên Play Console ởRelease > Setup > App signing
; nếu bạn làm vậy, thì bạn cũng sẽ tìm đúng đoạn mã JSON của Đường liên kết đến tài sản kỹ thuật số cho ứng dụng của bạn trên cùng một ứng dụng .
Tệp assetlinks.json
trong ví dụ sau 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 assetlinks.json
. Danh sách tệp sau đây cho thấy ví dụ về một tệp câu lệnh khai báo mối liên kết
với hai ứng dụng riêng biệt và nằm ở
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 đến các tài nguyên khác nhau trong cùng một máy chủ lưu trữ web. Ví dụ:
app1 có thể khai báo bộ lọc ý định cho https://example.com/articles
và app2 có thể khai báo
bộ lọc ý định cho https://example.com/videos
.
Lưu ý: Bạn có thể ký nhiều ứng dụng liên kết với một miền bằng cùng một hoặc chứng chỉ khác nhau.
Liên kết nhiều trang web với một ứng dụng duy nhất
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
tệp assetlinks.json
tương ứng. Danh sách tệp sau đây
hiển thị một ví dụ về cách khai báo mối liên kết của example.com và
example.net với app1. Trang thông tin đầu tiên cho thấy mối liên kết với example.com
với app1:
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"] } }]
Trang thông tin tiếp theo cho thấy mối liên kết giữa example.net với app1. 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"] } }]
Phát hành tệp xác minh JSON
Bạn phải xuất bản tệp xác minh JSON tại vị trí sau:
https://domain.name/.well-known/assetlinks.json
Hãy chắc chắn những điều sau:
- Tệp
assetlinks.json
được phân phát với thuộc tính content-typeapplication/json
- Tệp
assetlinks.json
phải 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 dưới dạng lược đồ dữ liệu hay không. - Tệp
assetlinks.json
phải truy cập được mà không có bất kỳ lệnh chuyển hướng nào (không 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 lưu trữ, thì bạn phải xuất bản
assetlinks.json
tệp trên mỗi miền. Xem Hỗ trợ tính năng liên kết ứng dụng cho nhiều máy chủ lưu trữ. - Không xuất bản ứng dụng của bạn bằng URL dev/test trong tệp kê khai có thể không có thể truy cập công khai (chẳng hạn như bất kỳ mạng nào chỉ truy cập được bằng VPN). Đáp giải pháp cho những trường hợp như vậy là định cấu hình bản dựng các biến thể để tạo một tệp kê khai khác cho bản dựng nhà phát triển.
Xác minh Đường liên kết trong ứng dụng Android
Khi android:autoVerify="true"
xuất hiện trong ít nhất một ý định của ứng dụng
bộ lọc, cài đặt ứng dụng của bạn trên một thiết bị chạy Android 6.0 (API cấp 23) hoặc
khiến hệ thống tự động xác minh máy chủ lưu trữ được liên kết với
URL trong bộ lọc ý định của ứng dụng. Trên Android 12 trở lên, bạn
cũng có thể gọi quy trình xác minh theo cách thủ công để
kiểm thử logic xác minh.
Tự động xác minh
Quy trình xác minh tự động của hệ thống bao gồm những việc sau:
- Hệ thống sẽ kiểm tra tất cả các bộ lọc ý định bao gồm bất kỳ bộ lọc ý định nào sau đây:
- Hành động:
android.intent.action.VIEW
- Danh mục:
android.intent.category.BROWSABLE
vàandroid.intent.category.DEFAULT
- Giao thức truy cập dữ liệu:
http
hoặchttps
- Hành động:
- Đối với mỗi tên máy chủ riêng biệt có trong các bộ lọc ý định ở trên, truy vấn Android
các trang web tương ứng cho tệp Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) tại
https://hostname/.well-known/assetlinks.json
.
Sau khi bạn xác nhận danh sách trang web để liên kết với ứng dụng của mình, và bạn đã xác nhận rằng tệp JSON được lưu trữ là hợp lệ, hãy cài đặt ứng dụng trên thiết bị. Chờ ít nhất 20 giây để quá trình xác minh không đồng bộ thực hiện đã hoàn tất. Hãy sử dụng lệnh sau đây để kiểm tra xem hệ thống đã xác minh và đặt chính sách xử lý đường liên kết chính xác:
adb shell am start -a android.intent.action.VIEW \ -c android.intent.category.BROWSABLE \ -d "http://domain.name:optional_port"
Xác minh theo cách thủ công
Kể từ Android 12, bạn có thể gọi miền theo cách thủ công cho một ứng dụng được cài đặt trên thiết bị. Bạn có thể thực hiện việc này bất kể ứng dụng của bạn có nhắm đến Android 12 hay không.
Thiết lập kết nối Internet
Để thực hiện xác minh miền, thiết bị thử nghiệm của bạn phải được kết nối với Internet.
Hỗ trợ quy trình xác minh miền mới
Nếu ứng dụng của bạn nhắm đến Android 12 trở lên, hệ thống sẽ sử dụng đã cập nhật tự động quy trình xác minh tên miền.
Nếu không, bạn có thể bật quy trình xác minh mới theo cách thủ công. Để làm như vậy, chạy lệnh sau đây trong một cửa sổ dòng lệnh khác:
adb shell am compat enable 175408749 PACKAGE_NAME
Đặt lại trạng thái của Đường liên kết trong ứng dụng Android trên thiết bị
Trước khi gọi quá trình xác minh miền theo cách thủ công trên một thiết bị, bạn phải đặt lại trạng thái của Đường liên kết trong ứng dụng Android trên thiết bị kiểm thử. Để thực hiện việc này, hãy chạy lệnh sau trong cửa sổ dòng lệnh:
adb shell pm set-app-links --package PACKAGE_NAME 0 all
Lệnh này đặt thiết bị về trạng thái giống như trước người dùng chọn ứng dụng mặc định cho bất kỳ miền nào.
Gọi quy trình xác minh miền
Sau khi đặt lại trạng thái của Đường liên kết trong ứng dụng Android trên một thiết bị, bạn có thể thực hiện quy trình xác minh. Để thực hiện điều này, hãy chạy lệnh sau trong cửa sổ dòng lệnh:
adb shell pm verify-app-links --re-verify PACKAGE_NAME
Xem kết quả xác minh
Sau khi cho nhân viên xác minh một chút thời gian để hoàn tất yêu cầu, xem kết quả xác minh. Để thực hiện việc này, hãy chạy lệnh sau:
adb shell pm get-app-links PACKAGE_NAME
Kết quả của lệnh này tương tự như kết quả sau:
com.example.pkg: ID: 01234567-89ab-cdef-0123-456789abcdef Signatures: [***] Domain verification state: example.com: verified sub.example.com: legacy_failure example.net: verified example.org: 1026
Các miền vượt qua quy trình xác minh sẽ có trạng thái xác minh miền
trong tổng số verified
. Bất kỳ trạng thái nào khác cho biết rằng không thể xác minh miền
cần thực hiện. Cụ thể, trạng thái none
cho biết quá trình xác minh
nhân viên hỗ trợ có thể chưa hoàn tất quy trình xác minh.
Danh sách sau đây cho thấy các giá trị trả về có thể áp dụng cho việc xác minh miền trả về một miền nhất định:
none
- Chưa có nội dung nào được ghi lại cho miền này. Hãy chờ thêm vài phút để tác nhân xác minh để hoàn tất các yêu cầu liên quan đến việc xác minh miền, sau đó gọi quy trình xác minh miền một lần nữa.
verified
- Miền đã được xác minh thành công cho ứng dụng khai báo.
approved
- Miền này bị buộc phê duyệt, thường là bằng cách thực thi một lệnh shell.
denied
- Miền bị buộc từ chối, thường là bằng cách thực thi một lệnh shell.
migrated
- Hệ thống đã giữ nguyên kết quả của một quy trình trước đó là sử dụng miền cũ xác minh.
restored
- Miền được phê duyệt sau khi người dùng khôi phục dữ liệu. Giá trị giả định miền đã được xác minh trước đó.
legacy_failure
- Miền bị trình xác minh cũ từ chối. Lý do không thành công cụ thể là không xác định.
system_configured
- Miền được cấu hình thiết bị phê duyệt tự động.
- Mã lỗi
1024
trở lên Mã lỗi tuỳ chỉnh dành riêng cho trình xác minh thiết bị.
Kiểm tra kỹ để đảm bảo bạn đã thiết lập mạng kết nối và gọi miền quy trình xác minh của chúng tôi.
Yêu cầu người dùng liên kết ứng dụng của bạn với một miền
Một cách khác để ứng dụng được phê duyệt cho một miền là yêu cầu người dùng liên kết ứng dụng của bạn với miền đó.
Kiểm tra xem ứng dụng của bạn đã được phê duyệt cho miền hay chưa
Trước khi bạn nhắc người dùng, hãy kiểm tra xem ứng dụng của bạn có phải là trình xử lý mặc định cho
các miền mà bạn xác định trong phần tử <intent-filter>
. Bạn có thể truy vấn
trạng thái phê duyệt bằng một trong các phương thức sau:
DomainVerificationManager
API (trong thời gian chạy).- Một chương trình dòng lệnh (trong quá trình kiểm thử).
Trình quản lý xác minh miền
Đoạn mã sau đây minh hoạ cách sử dụng
API DomainVerificationManager
:
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val manager = context.getSystemService(DomainVerificationManager::class.java) val userState = manager.getDomainVerificationUserState(context.packageName) // Domains that have passed Android App Links verification. val verifiedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_VERIFIED } // Domains that haven't passed Android App Links verification but that the user // has associated with an app. val selectedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_SELECTED } // All other domains. val unapprovedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_NONE }
Java
Context context = TODO("Your activity or fragment's Context"); DomainVerificationManager manager = context.getSystemService(DomainVerificationManager.class); DomainVerificationUserState userState = manager.getDomainVerificationUserState(context.getPackageName()); Map<String, Integer> hostToStateMap = userState.getHostToStateMap(); List<String> verifiedDomains = new ArrayList<>(); List<String> selectedDomains = new ArrayList<>(); List<String> unapprovedDomains = new ArrayList<>(); for (String key : hostToStateMap.keySet()) { Integer stateValue = hostToStateMap.get(key); if (stateValue == DomainVerificationUserState.DOMAIN_STATE_VERIFIED) { // Domain has passed Android App Links verification. verifiedDomains.add(key); } else if (stateValue == DomainVerificationUserState.DOMAIN_STATE_SELECTED) { // Domain hasn't passed Android App Links verification, but the user has // associated it with an app. selectedDomains.add(key); } else { // All other domains. unapprovedDomains.add(key); } }
Chương trình dòng lệnh
Khi kiểm thử ứng dụng trong quá trình phát triển, bạn có thể chạy lệnh sau để truy vấn trạng thái xác minh của các miền mà tổ chức của bạn sở hữu:
adb shell pm get-app-links --user cur PACKAGE_NAME
Trong kết quả của ví dụ sau, mặc dù ứng dụng không xác minh được cho "example.org" , người dùng 0 đã phê duyệt ứng dụng theo cách thủ công trong phần cài đặt hệ thống, và không có gói nào khác được xác minh cho miền đó.
com.example.pkg: ID: *** Signatures: [***] Domain verification state: example.com: verified example.net: verified example.org: 1026 User 0: Verification link handling allowed: true Selection state: Enabled: example.org Disabled: example.com example.net
Bạn cũng có thể sử dụng các lệnh shell để mô phỏng quy trình mà người dùng chọn
ứng dụng nào được liên kết với một miền nhất định. Giải thích đầy đủ về
có thể sử dụng các lệnh trong dữ liệu đầu ra của adb shell pm
.
Cung cấp bối cảnh cho yêu cầu
Trước khi bạn đưa ra yêu cầu phê duyệt miền này, hãy cung cấp một số ngữ cảnh cho người dùng. Ví dụ: bạn có thể hiển thị cho họ màn hình chờ, hộp thoại hoặc Thành phần trên giao diện người dùng giải thích cho người dùng lý do ứng dụng của bạn nên là trình xử lý mặc định cho một miền cụ thể.
Đưa ra yêu cầu
Sau khi người dùng hiểu ứng dụng đang yêu cầu họ làm gì, hãy đưa ra yêu cầu.
Để làm vậy, hãy gọi một ý định bao gồm
ACTION_APP_OPEN_BY_DEFAULT_SETTINGS
thao tác theo ý định và so khớp chuỗi dữ liệu
package:com.example.pkg
cho ứng dụng mục tiêu, như minh hoạ trong
đoạn mã sau:
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val intent = Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:${context.packageName}")) context.startActivity(intent)
Java
Context context = TODO("Your activity or fragment's Context"); Intent intent = new Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:" + context.getPackageName())); context.startActivity(intent);
Khi ý định được gọi, người dùng sẽ thấy một màn hình cài đặt có tên là Mở bằng mặc định. Màn hình này chứa nút chọn có tên Mở các đường liên kết được hỗ trợ. như minh hoạ trong hình 1.
Khi người dùng bật lựa chọn Mở các đường liên kết được hỗ trợ, một nhóm các hộp đánh dấu sẽ xuất hiện trong phần có tên là Đường liên kết để mở trong ứng dụng này. Từ đây, người dùng có thể chọn miền mà họ muốn liên kết với ứng dụng của bạn. Họ cũng có thể chọn Thêm đường liên kết để thêm miền, như minh hoạ trong hình 2. Khi người dùng sau này chọn bất kỳ đường liên kết nào trong miền mà họ thêm, đường liên kết đó sẽ mở ra trong ứng dụng của bạn tự động.
Mở các miền trong ứng dụng mà ứng dụng của bạn không xác minh được
Chức năng chính của ứng dụng có thể là mở các đường liên kết với tư cách là bên thứ ba, mà không xác minh miền đã xử lý. Nếu trường hợp này xảy ra, hãy giải thích cho người dùng tại thời điểm đó, khi chọn một đường liên kết trang web, họ không thể chọn giữa ứng dụng bên thứ nhất và ứng dụng của bạn (bên thứ ba). Người dùng cần tự liên kết với ứng dụng bên thứ ba.
Ngoài ra, hãy cân nhắc giới thiệu một hoạt động hộp thoại hoặc hoạt động đàn hồi cho phép người dùng mở đường liên kết trong ứng dụng của bên thứ nhất nếu muốn, hoạt động như một proxy. Trước khi thiết lập một hộp thoại hoặc hoạt động đàn hồi như vậy, hãy đặt ứng dụng của bạn để có chế độ hiển thị gói vào các ứng dụng bên thứ nhất khớp với bộ lọc ý định trên web của ứng dụng.
Đường liên kết đến ứng dụng thử nghiệm
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 để hãy đảm bảo hệ thống có thể liên kết ứng dụng của bạn với trang web và xử lý các yêu cầu URL, như bạn mong đợi.
Để kiểm thử tệp câu lệnh hiện có, bạn có thể sử dụng Công cụ Trình tạo danh sách câu lệnh và Trình kiểm tra.
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 máy chủ liên kết mà hệ thống cần xác minh cho ứng dụng của mình. Tạo danh sách tất cả URL có bộ lọc ý định tương ứng bao gồm: thuộc tính và phần tử:
- Thuộc tính
android:scheme
có giá trịhttp
hoặchttps
- Thuộc tính
android:host
có mẫu URL miền android.intent.action.VIEW
phần tử hành động- Phần tử danh mục
android.intent.category.BROWSABLE
Sử dụng danh sách này để kiểm tra nhằm đảm bảo rằng tệp JSON chứa Đường liên kết đến tài sản kỹ thuật số được cung cấp trên mỗi máy chủ có tên và miền con.
Xác nhận các 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 Digital Asset Links API (API Đường liên kết đến tài sản kỹ thuật số) để xác nhận rằng Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) JSON được lưu trữ và xác định đúng cách:
https://digitalassetlinks.googleapis.com/v1/statements:list? source.web.site=https://domain.name:optional_port& relation=delegate_permission/common.handle_all_urls
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ý mối liên kết. Hãy dùng lệnh sau để tải danh sách các chính sách xử lý đường liên kết hiện có cho tất cả trên thiết bị đã kết nối của bạn:
adb shell dumpsys package domain-preferred-apps
Hoặc các bước sau sẽ thực hiện điều tương tự:
adb shell dumpsys package d
Lưu ý: Đảm bảo bạn đợi ít nhất 20 giây sau khi cài đặt ứng dụng để cho phép hệ thống hoàn tất quá trình xác minh.
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 tiêu đề ở định dạng sau:
App linkages for user 0:
Theo tiêu đề này, đầu ra sẽ sử dụng định dạng sau để liệt kê các chế độ cài đặt xử lý việc liên kết cho người dùng đó:
Package: com.android.vending Domains: play.google.com market.android.com Status: always : 200000002
Trang thông tin này cho biết ứng dụng nào được liên kết với những miền dành 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.Domains
– Hiển thị danh sách đầy đủ 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 khoảng trống làm dấu phân cách.Status
– Cho biết chế độ cài đặt xử lý đường liên kết hiện tại của ứng dụng này. Một ứng dụng có đã vượt qua quy trình xác minh và có tệp kê khai chứaandroid:autoVerify="true"
, cho biết trạng thái trong tổng sốalways
. Số thập lục phân sau trạng thái này có liên quan đến mã bản ghi về các lựa chọn ưu tiên của người dùng về việc liên kết ứng dụng. Giá trị này không cho biết việc xác minh đã thành công.
Lưu ý: Nếu người dùng thay đổi chế độ cài đặt đường liên kết đến ứng dụng của một ứng dụng trước khi xác minh đã hoàn tất, bạn có thể thấy kết quả dương tính giả cho việc xác minh thành công, mặc dù không xác minh được. Tuy nhiên, lỗi xác minh này không quan trọng nếu người dùng cho phép ứng dụng mở các đường liên kết được hỗ trợ một cách rõ ràng mà không cần hỏi. Điều này là do lựa chọn ưu tiên của người dùng sẽ được ưu tiên hơn so với phương thức xác minh có lập trình (hoặc không có tuỳ chọn này). Do đó, đường liên kết này sẽ chuyển thẳng đến ứng dụng của bạn mà không hiện hộp thoại, giống như việc xác minh đã thành công.
Ví dụ kiểm thử
Để xác minh đường liên kết ứng dụng thành công, hệ thống phải xác minh được ứng dụng của bạn với từng các trang web mà bạn chỉ định trong một bộ lọc ý định nhất định đáp ứng tiêu chí dành cho ứng dụng . Ví dụ sau đây minh hoạ một cấu hình tệp kê khai với một số đường liên kết đến ứng dụng được xác định:
<application> <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 các máy chủ lưu trữ mà nền tảng sẽ cố gắng xác minh qua tệp kê khai ở trên là:
www.example.com mobile.example.com www.example2.com account.example.com
Danh sách các máy chủ mà nền tảng sẽ không cố gắng xác minh qua tệp kê khai ở trên 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 bảng sao kê, hãy xem Tạo Danh sách câu lệnh.
Khắc phục các lỗi triển khai phổ biến
Nếu bạn không thể xác minh Đường liên kết trong ứng dụng Android, hãy kiểm tra các thông tin phổ biến sau
. Phần này sử dụng example.com
làm tên miền giữ chỗ; thời gian
khi thực hiện các bước kiểm tra này, hãy thay example.com
bằng dữ liệu thực tế trên máy chủ của bạn
tên miền của bạn.
- Thiết lập bộ lọc ý định chưa chính xác
- Kiểm tra xem liệu bạn có đưa URL mà ứng dụng của bạn không sở hữu vào trong ứng dụng hay không
Phần tử
<intent-filter>
. - Cấu hình máy chủ không chính xác
Kiểm tra cấu hình JSON của máy chủ và đảm bảo giá trị SHA được chính xác.
Ngoài ra, hãy kiểm tra để đảm bảo rằng
example.com.
(có giai đoạn ở cuối) phân phát cùng một mức nội dung dưới dạngexample.com
.- Lệnh chuyển hướng phía máy chủ
Hệ thống sẽ không xác minh bất kỳ Đường liên kết nào trong ứng dụng Android cho ứng dụng của bạn nếu bạn thiết lập một lệnh chuyển hướng, chẳng hạn như:
http://example.com
đếnhttps://example.com
example.com
đếnwww.example.com
Hành vi này giúp bảo vệ tính bảo mật của ứng dụng.
- Khả năng mạnh mẽ của máy chủ
Kiểm tra xem máy chủ của bạn có thể kết nối với các ứng dụng khách hay không.
- Đường liên kết không thể xác minh
Nhằm mục đích thử nghiệm, có thể bạn chủ ý thêm các đường liên kết không thể xác minh. Giữ lại xin lưu ý rằng trên Android 11 trở xuống, những đường liên kết này khiến để không xác minh tất cả Đường liên kết trong ứng dụng Android cho ứng dụng của bạn.
- Chữ ký không chính xác trong assetlinks.json
Xác minh rằng chữ ký của bạn là chính xác và khớp với chữ ký dùng để ký ứng dụng của bạn. Các lỗi phổ biến bao gồm:
- Ký ứng dụng bằng chứng chỉ gỡ lỗi và chỉ có bản phát hành
trong
assetlinks.json
. - Có chữ ký thường trong
assetlinks.json
. Chữ ký phải được viết hoa. - Nếu bạn đang sử dụng Tính năng ký ứng dụng của Play, hãy đảm bảo rằng bạn đang sử dụng chữ ký mà Google sử dụng để ký từng bản phát hành của bạn. Bạn có thể xác minh những thông tin này, bao gồm đoạn mã JSON hoàn chỉnh, bằng cách làm theo hướng dẫn về khai báo mối liên kết với trang web.
- Ký ứng dụng bằng chứng chỉ gỡ lỗi và chỉ có bản phát hành
trong