Khi một đường liên kết được nhấp hoặc một yêu cầu có lập trình gọi một ý định URI web, hệ thống Android thử từng thao tác sau theo thứ tự tuần tự, cho đến khi yêu cầu thành công:
- Mở ứng dụng ưu tiên của người dùng có khả năng xử lý URI, nếu ứng dụng đó được chỉ định.
- Mở ứng dụng duy nhất hiện có có thể xử lý URI.
- Cho phép người dùng chọn một ứng dụng trong hộp thoại.
Hãy làm theo các bước dưới đây để tạo và kiểm tra các đường liên kết đến nội dung của bạn. Bạn cũng có thể sử dụng App Links Assistant (Trợ lý đường liên kết trong ứng dụng) trong Android Studio để thêm Đường liên kết trong ứng dụng Android.
Lưu ý: Kể từ Android 12 (API cấp 31), một phiên bản chung ý định của web chỉ phân giải thành một hoạt động trong ứng dụng của bạn khi ứng dụng đó được phê duyệt miền cụ thể có trong ý định web đó. Nếu ứng dụng của bạn không được phê duyệt cho miền, ý định web phân giải thành ứng dụng trình duyệt mặc định của người dùng thay thế.
Thêm bộ lọc ý định cho đường liên kết đến
Để tạo đường liên kết đến nội dung ứng dụng, hãy thêm bộ lọc ý định chứa các phần tử và giá trị thuộc tính sau trong tệp kê khai của bạn:
<action>
- Chỉ định thao tác theo ý định
ACTION_VIEW
để mà bạn có thể truy cập vào bộ lọc ý định qua Google Tìm kiếm. <data>
- Thêm một hoặc nhiều
<data>
các thẻ mà mỗi thẻ đại diện cho một định dạng URI phân giải thành hoạt động. Ít nhất, Thẻ<data>
phải bao gồmandroid:scheme
.Bạn có thể thêm các thuộc tính khác để tinh chỉnh thêm loại URI mà hoạt động chấp nhận. Cho ví dụ: có thể bạn có nhiều hoạt động chấp nhận các URI tương tự nhau, nhưng chỉ khác nhau dựa trên tên đường dẫn. Trong trường hợp này, hãy sử dụng phương thức Thuộc tính
android:path
hoặc các biến thểpathPattern
haypathPrefix
của nguồn cấp dữ liệu đó để phân biệt hoạt động mà hệ thống sẽ mở cho các đường dẫn URI khác nhau. <category>
- Bao gồm
BROWSABLE
danh mục. Đây là yêu cầu bắt buộc để có thể truy cập vào bộ lọc ý định trên web trình duyệt. Nếu không có cookie, việc nhấp vào đường liên kết trong trình duyệt sẽ không thể giải quyết được ứng dụng của bạn.Đồng thời thêm cả danh mục
DEFAULT
. Điều này cho phép ứng dụng của bạn phản hồi các ý định ngầm ẩn. Nếu không, hoạt động có thể bắt đầu chỉ khi ý định chỉ định tên thành phần ứng dụng.
Đoạn mã XML sau đây minh hoạ cách bạn có thể chỉ định một bộ lọc ý định
trong tệp kê khai để liên kết sâu. Các URI “example://gizmos”
và
Cả “http://www.example.com/gizmos”
đều phân giải được hoạt động này.
<activity android:name="com.example.android.GizmosActivity" android:label="@string/title_gizmos" > <intent-filter android:label="@string/filter_view_http_gizmos"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs that begin with "http://www.example.com/gizmos” --> <data android:scheme="http" android:host="www.example.com" android:pathPrefix="/gizmos" /> <!-- note that the leading "/" is required for pathPrefix--> </intent-filter> <intent-filter android:label="@string/filter_view_example_gizmos"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs that begin with "example://gizmos” --> <data android:scheme="example" android:host="gizmos" /> </intent-filter> </activity>
Lưu ý rằng 2 bộ lọc ý định chỉ khác nhau ở phần tử <data>
.
Mặc dù có thể đưa nhiều phần tử <data>
vào cùng một bộ lọc,
bạn cần phải tạo các bộ lọc riêng biệt khi muốn khai báo các bộ lọc duy nhất
URL (chẳng hạn như một tổ hợp cụ thể của scheme
và host
), vì
nhiều phần tử <data>
trong cùng một bộ lọc ý định thực sự đượ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ụ: hãy xem xét những điều sau:
<intent-filter> ... <data android:scheme="https" android:host="www.example.com" /> <data android:scheme="app" android:host="open.my.app" /> </intent-filter>
Có vẻ như phương thức này chỉ hỗ trợ https://www.example.com
và
app://open.my.app
Tuy nhiên, công cụ này thực sự hỗ trợ hai yếu tố đó, cộng với:
app://www.example.com
và https://open.my.app
.
Thận trọng: Nếu nhiều hoạt động chứa các bộ lọc ý định phân giải thành cùng một bộ lọc đường liên kết trong ứng dụng Android đã xác minh, thì không thể đảm bảo về hoạt động xử lý đường liên kết.
Sau khi thêm các bộ lọc ý định bằng URI cho nội dung hoạt động vào ứng dụng
tệp kê khai, Android có thể định tuyến mọi Intent
có các URI phù hợp với ứng dụng của bạn trong thời gian chạy.
Để tìm hiểu thêm về cách xác định bộ lọc ý định, hãy xem Cho phép ứng dụng khác bắt đầu hoạt động của bạn.
Đọc dữ liệu từ các ý định đến
Sau khi hệ thống bắt đầu hoạt động thông qua một bộ lọc ý định, bạn có thể
sử dụng dữ liệu do Intent
cung cấp để xác định nội dung bạn cần kết xuất. Gọi điện
getData()
và
getAction()
để truy xuất dữ liệu và
hành động liên kết với Intent
đến. Bạn có thể
gọi các phương thức này bất cứ lúc nào trong vòng đời của hoạt động, nhưng bạn
thường nên làm như vậy trong các lệnh gọi lại sớm như
onCreate()
hoặc
onStart()
Dưới đây là một đoạn mã cho biết cách truy xuất dữ liệu từ
Intent
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) val action: String? = intent?.action val data: Uri? = intent?.data }
Java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData(); }
Hãy làm theo các phương pháp hay nhất sau đây để cải thiện trải nghiệm của người dùng:
- Đường liên kết sâu phải đưa người dùng đến thẳng nội dung, mà không có bất kỳ lời nhắc, trang xen kẽ hoặc thông tin đăng nhập nào. Hãy đảm bảo rằng người dùng có thể xem nội dung ứng dụng ngay cả khi trước đó họ chưa từng mở ứng dụng. Bạn có thể nhắc người dùng về các lượt tương tác tiếp theo hoặc khi họ mở ứng dụng từ Trình chạy.
- Làm theo hướng dẫn thiết kế được mô tả trong Điều hướng bằng thao tác Quay lại và vuốt lên để ứng dụng của bạn phù hợp với kỳ vọng về điều hướng lui sau họ truy cập vào ứng dụng của bạn thông qua một liên kết sâu.
Kiểm thử đường liên kết sâu
Bạn có thể sử dụng tính năng Gỡ lỗi Android Cầu nối bằng công cụ trình quản lý hoạt động (am) để kiểm thử bộ lọc ý định Các URI mà bạn đã chỉ định để liên kết sâu sẽ phân giải đến hoạt động ứng dụng chính xác. Bạn có thể chạy lệnh adb trên một thiết bị hoặc trình mô phỏng.
Cú pháp chung để kiểm thử URI bộ lọc ý định bằng adb là:
$ adb shell am start -W -a android.intent.action.VIEW -d <URI> <PACKAGE>
Ví dụ: lệnh bên dưới cố gắng xem hoạt động ứng dụng mục tiêu được liên kết với URI được chỉ định.
$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android
Phần khai báo tệp kê khai và trình xử lý ý định mà bạn đặt ở trên sẽ xác định kết nối giữa ứng dụng của bạn và một trang web cũng như việc cần làm với các đường liên kết đến trang web. Tuy nhiên, trong để hệ thống coi ứng dụng của bạn là trình xử lý mặc định cho một tập hợp URI, bạn phải cũng yêu cầu hệ thống xác minh kết nối này. Bài học tiếp theo sẽ giải thích cách triển khai quy trình xác minh này.
Để tìm hiểu thêm về ý định và đường liên kết ứng dụng, hãy xem các tài nguyên sau:
- Ý định và bộ lọc ý định
- Cho phép ứng dụng khác bắt đầu hoạt động của bạn
- Thêm Đường liên kết trong ứng dụng Android bằng Android Studio