Khi một đường liên kết được nhấp hoặc yêu cầu có lập trình gọi một ý định URI web, hệ thống Android sẽ thử từng thao tác sau đây theo thứ tự tuần tự cho đến khi yêu cầu thành công:
- Mở ứng dụng mà người dùng ưu tiên 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.
Hãy làm theo các bước bên dưới để tạo và kiểm thử đường liên kết đến nội dung của bạn. Bạn cũng có thể sử dụng Trợ lý đường liên kết trong ứng dụng trong Android Studio để thêm Đường liên kết đến ứng dụng Android.
Lưu ý: Kể từ Android 12 (API cấp 31), một ý định chung trên web chỉ phân giải thành một hoạt động trong ứng dụng của bạn nếu ứng dụng đó được phê duyệt cho miền cụ thể có trong ý định đó trên web. Nếu ứng dụng của bạn không được phê duyệt cho miền này, thì ý định trên web sẽ chuyển đến ứng dụng trình duyệt mặc định của người dùng.
Thêm bộ lọc ý định cho đường liên kết đến
Để tạo một đường liên kết đến nội dung trong ứ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 sau đây trong tệp kê khai:
<action>
- Chỉ định thao tác theo ý định
ACTION_VIEW
để người dùng có thể truy cập bộ lọc ý định từ Google Tìm kiếm. <data>
- 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ối thiểu, thẻ<data>
phải bao gồm thuộc tínhandroid: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 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 thuộc tính
android:path
hoặc các biến thểpathPattern
hoặcpathPrefix
của thuộc tính này để phân biệt hoạt động mà hệ thống sẽ mở cho các đường dẫn URI khác nhau. <category>
- Thêm danh mục
BROWSABLE
. Đây là yêu cầu bắt buộc để bộ lọc ý định có thể truy cập được từ một trình duyệt web. Nếu không có, việc nhấp vào một đường liên kết trong trình duyệt sẽ không thể chuyển đến ứng dụng của bạn.Bạn cũng nên thê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ó thuộc tính 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>
Lưu ý rằng 2 bộ lọc ý định này chỉ khác nhau ở phần tử <data>
.
Mặc dù bạn có thể thêm 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 cân nhắc 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ư tính năng này chỉ hỗ trợ https://www.example.com
và app://open.my.app
. Tuy nhiên, nó thực sự hỗ trợ 2 loại này, cộng thêm 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 Đường liên kết đến ứng dụng Android đã xác minh, thì không có gì đảm bảo hoạt động nào sẽ xử lý đường liên kết đó.
Sau khi bạn thêm 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 trùng khớ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 phần 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 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 hiển thị. 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 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à 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 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ý.
- Làm theo hướng dẫn thiết kế được mô tả trong phần Đ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 Android Debug Bridge với công cụ trình quản lý hoạt động (am) để kiểm thử xem các URI bộ lọc ý định mà bạn chỉ định cho tính năng liên kết sâu có phân giải thành hoạt động ứng dụng chính xác hay không. 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 dưới đây cố gắng xem một hoạt động của ứ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 ở trên sẽ xác định mối 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. 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 nhóm URI, bạn cũng phải yêu cầu hệ thống xác minh mối kết nối này. Bài học tiếp theo 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 ứ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