Tính năng liên kết sâu cho phép bạn đưa người dùng trực tiếp vào ứng dụng của mình từ trình duyệt web, thông báo, mạng xã hội, quảng cáo và các nguồn khác. Đường liên kết sâu cung cấp các quá trình chuyển đổi trực tiếp từ ứng dụng sang ứng dụng và từ web sang ứng dụng, giúp bạn tăng mức độ tương tác thông qua nội dung theo ngữ cảnh và nhắm đến mục tiêu.
Hướng dẫn này giải thích cách hoạt động của tính năng liên kết sâu và cách tạo cũng như kiểm thử đường liên kết sâu đến nội dung của bạn.
Đối với các đường liên kết sâu tham chiếu đến trang web hoặc miền của riêng bạn, bạn nên sử dụng Đường liên kết đến ứng dụng. Đường liên kết đến ứng dụng mang lại trải nghiệm liền mạch và đáng tin cậy cho người dùng.
Cách hoạt động của tính năng liên kết sâu
Tính năng liên kết sâu là một khả năng chung của hệ thống Android, được hỗ trợ trên tất cả các phiên bản và trên tất cả các thiết bị. Tính năng này tận dụng hệ thống Ý định của Android để định tuyến các đường liên kết sâu đến các ứng dụng mà người dùng quan tâm. Các ứng dụng muốn xử lý một URI liên kết sâu cụ thể sẽ khai báo một bộ lọc Ý định phù hợp trong tệp kê khai ứng dụng.
Trong thời gian chạy, khi người dùng nhấn vào một đường liên kết, Android sẽ kích hoạt một ý định và cố gắng định tuyến ý định đó đến một ứng dụng. Vì nhiều ứng dụng có thể khai báo các bộ lọc ý định phù hợp với một URI nhất định, nên Android sẽ thực hiện các thao tác này theo thứ tự sau để định tuyến ý định:
- Mở ứng dụng mặc định của người dùng có thể xử lý URI (nếu có).
- Mở ứng dụng duy nhất có thể xử lý URI.
- Cho phép người dùng chọn một ứng dụng trong hộp thoại phân định.
Điều này có nghĩa là mặc dù bộ lọc ý định của bạn phù hợp với một URI nhất định, nhưng không có gì đảm bảo rằng hệ thống sẽ định tuyến ý định liên kết sâu đến ứng dụng của bạn. Người dùng đóng vai trò quan trọng trong việc quản lý ứng dụng xử lý ý định, giúp họ kiểm soát và có quyền lựa chọn. Để kiểm soát nhiều hơn các đường liên kết sâu đến trang web và miền của riêng bạn, hãy thử sử dụng Đường liên kết đến ứng dụng.
Hộp thoại phân định của Android cho phép người dùng xem tất cả các ứng dụng đã cài đặt và đã đăng ký để xử lý một ý định liên kết sâu. Người dùng cũng có thể chọn một ứng dụng làm ứng dụng mặc định cho loại đường liên kết này. Sau khi người dùng đặt một ứng dụng mặc định, hệ thống sẽ không còn hiển thị hộp thoại cho ý định cụ thể đó nữa và ứng dụng đã chọn sẽ tự động mở.
Hành vi của hộp thoại phân định đã phát triển trên các phiên bản Android. Ví dụ: trên Android 12 trở lên, các đường liên kết trang web không phải là Đường liên kết đến ứng dụng đã xác minh thường sẽ mở trong trình duyệt web theo mặc định. Trong khi đó, trên các phiên bản trước, hộp thoại phân định có thể xuất hiện nếu một ứng dụng có thể xử lý đường liên kết trang web.
Các loại đường liên kết sâu
Có 3 loại đường liên kết sâu mà bạn có thể hỗ trợ trên Android:
- Đường liên kết sâu tuỳ chỉnh: Đây là các đường liên kết sâu sử dụng lược đồ URI tuỳ chỉnh (chẳng hạn
như
example://products/123) để đưa người dùng trực tiếp đến một nội dung cụ thể trong ứng dụng. Các đường liên kết này rất hữu ích cho việc điều hướng nội bộ hoặc các đường liên kết từ các nguồn mà bạn kiểm soát, nhưng chúng không phải là đường liên kết trang web tiêu chuẩn và vẫn có thể kích hoạt hộp thoại phân định nếu một ứng dụng khác đăng ký cùng một lược đồ tuỳ chỉnh. - Đường liên kết trang web: Đây là các đường liên kết sâu sử dụng lược đồ
httpvàhttpstiêu chuẩn. Các đường liên kết này linh hoạt hơn vì chúng là URL tiêu chuẩn, nhưng trên Android 12 trở lên, chúng hầu như luôn kích hoạt hộp thoại phân định. Điều này có nghĩa là theo mặc định, chúng có khả năng được trình duyệt web của người dùng xử lý thay vì được định tuyến đến ứng dụng của bạn. - Đường liên kết đến ứng dụng: Có từ Android 6.0 (cấp độ API 23), đây là các đường liên kết trang web đã xác minh. Thông qua quy trình liên kết trang web, bạn có thể chứng minh cho hệ thống Android rằng bạn sở hữu miền đó. Sau khi được xác minh, hệ thống sẽ tự động định tuyến các đường liên kết cho miền đó trực tiếp đến ứng dụng của bạn, bỏ qua hoàn toàn hộp thoại phân định. Điều này tạo ra trải nghiệm đáng tin cậy và liền mạch cho người dùng.
Thêm bộ lọc ý định cho các đường liên kết đến
Để tạo một đường liên kết đến nội dung ứng dụng, hãy thêm một bộ lọc ý định chứa các phần tử và giá trị thuộc tính này trong tệp kê khai:
Chỉ định thao tác theo ý định ACTION_VIEW để có thể truy cập vào bộ lọc ý định từ Google Tìm kiếm.
Thêm một hoặc nhiều thẻ <data>, 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ồm thuộc tính
android: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. Ví dụ: bạn có thể có nhiều hoạt động chấp nhận các URI tương tự, nhưng khác nhau dựa trên đường dẫn. Trong trường hợp này, hãy sử dụng thuộc tính
android:path hoặc các biến thể pathPattern hoặc pathPrefix của thuộc tính đó để
phân biệt hoạt động mà hệ thống sẽ mở cho các đường dẫn URI khác nhau.
Bao gồm danh mục BROWSABLE. Danh mục này là bắt buộc để có thể truy cập vào bộ lọc ý định từ trình duyệt web. Nếu không có danh mục này, việc nhấp vào một đường liên kết trong trình duyệt sẽ không thể phân giải thành ứng dụng của bạn.
Cũng bao gồm 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 có danh mục này, hoạt động chỉ có thể bắt đầu nếu ý định chỉ định tên thành phần ứng dụng của bạn.
Đoạn mã XML sau đây cho thấy 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ả URI "example://gizmos" và
"http://www.example.com/gizmos" đều phân giải thành 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>
Xin lưu ý rằng 2 bộ lọc ý định chỉ khác nhau ở phần tử <data>. Mặc dù
bạn có thể đưa nhiều phần tử <data> vào cùng một bộ lọc, nhưng bạn
cần tạo các bộ lọc riêng biệt khi muốn khai báo các
URL riêng biệt (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ả các biến thể của các thuộc tính kết hợp. Ví dụ: hãy xem xét trường hợp 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ư trường hợp này chỉ hỗ trợ https://www.example.com và app://open.my.app. Tuy nhiên, trường hợp này thực sự hỗ trợ 2 đường liên kết đó, cộng với các đường liên kết sau: app://www.example.com và https://open.my.app.
Sau khi bạn thêm các bộ lọc ý định có URI cho nội dung hoạt động vào tệp kê khai ứng dụng, Android có thể định tuyến mọi Intent có URI phù hợp đến
ứ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 bài viết Cho phép các ứ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 của bạn 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 cần kết xuất. Gọi các phương thức
getData() và getAction() để truy xuất dữ liệu và
thao tác được 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 suốt vòng đời của hoạt động, nhưng thường thì bạn nên thực hiện
trong các lệnh gọi lại sớm như onCreate() hoặc onStart.
Sau đây là đ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 người dùng:
- Đường liên kết sâu sẽ đưa thẳng người dùng đến nội dung mà không cần đến lời nhắc, trang xen kẽ hay thao tác đăng nhập. 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. Việc nhắc người dùng khi họ thực hiện các thao tác tiếp theo hay khi họ mở ứng dụng qua Trình chạy là việc hoàn toàn hợp lý.
- Hãy làm theo hướng dẫn thiết kế được mô tả trong bài viết Điều hướng bằng nút Quay lại và Lên để ứng dụng của bạn đáp ứng được kỳ vọng của người dùng về khả năng điều hướng quay lại sau khi họ mở ứng dụng thông qua một đường liên kết sâu.
Kiểm thử đường liên kết sâu
Bạn có thể sử dụng Cầu gỡ lỗi Android với công cụ trình quản lý hoạt động (am) để kiểm thử rằng các URI bộ lọc ý định mà bạn đã chỉ định cho tính năng liên kết sâu phân giải thành 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 sau đây cố gắng xem một hoạt động ứng dụng mục tiêu được liên kết với URI đã chỉ định.
$ adb shell am start
-W -a android.intent.action.VIEW
-d "example://gizmos" com.example.android
Khai báo tệp kê khai và trình xử lý ý định mà bạn đặt sẽ xác định mối liên kết giữa ứng dụng và trang web, cũng như việc cần làm với các đường liên kết đến. Tuy nhiên, để 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 cũng phải yêu cầu hệ thống xác minh mối liên kết này. Bài viết Xác minh Đường liên kết đến ứng dụng 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 đến ứng dụng, hãy xem các tài nguyên sau:
- Ý định và bộ lọc ý định
- Cho phép các ứng dụng khác bắt đầu hoạt động của bạn
- Thêm Đường liên kết đến ứng dụng Android bằng Android Studio