App Link là cơ chế Android (Android 6.0+) tự động mở các liên kết web trong ứng dụng đã cài đặt, bỏ qua hộp thoại chọn. Thuật ngữ này được Google giới thiệu vào năm 2015 cùng với Android 6.0 Marshmallow. Theo Android Developers, App Link sử dụng Digital Asset Links — xác thực mật mã qua tệp trên máy chủ, xác nhận rằng tên miền thuộc về nhà phát triển ứng dụng.
Các điểm chính
App Link (Android App Link) là một liên kết HTTPS tiêu chuẩn, khi nhấp vào trên thiết bị Android, sẽ tự động mở ứng dụng đã cài đặt mà không hiển thị hộp thoại chọn tiêu chuẩn giữa trình duyệt và ứng dụng. Google đã giới thiệu App Link trong Android 6.0 (API 23) như một giải pháp cho vấn đề “hộp thoại chọn”, vốn làm giảm tỷ lệ chuyển đổi deep link do thao tác nhấp bổ sung và sự nhầm lẫn của người dùng.
Cải tiến chính: xác thực. Android xác thực rằng tên miền thực sự thuộc về nhà phát triển ứng dụng thông qua Digital Asset Links API. Google Play Store kiểm tra App Link khi xuất bản và có thể từ chối bản cập nhật nếu xác thực thất bại. Điều này làm cho App Link an toàn hơn Custom URL Scheme: không có ứng dụng nào khác có thể chặn liên kết đến tên miền của bạn.
Digital Asset Links là một giao thức mở mà Google sử dụng không chỉ cho App Link mà còn để liên kết trang web với ứng dụng trong kết quả tìm kiếm, Google Assistant và Smart Lock for Passwords. Giao thức này dựa trên xác thực mật mã: trong assetlinks.json, dấu vân tay SHA256 của chứng chỉ ký ứng dụng được chỉ định, loại bỏ khả năng giả mạo.
Quy trình hoạt động của App Link bao gồm ba giai đoạn: xác thực Digital Asset Links, xử lý qua Intent Filter và chuyển hướng tự động. Mỗi giai đoạn là bắt buộc. Nếu xác thực thất bại, Android hiển thị hộp thoại chọn — deep link đó hoạt động bình thường nhưng không có lợi thế chuyển đổi tự động.
Asset Links là tệp JSON được đặt trên máy chủ tại https://domain/.well-known/assetlinks.json. Tệp chứa một mảng các đối tượng với các trường: relation (mảng chuỗi mô tả loại quan hệ), target (đối tượng với namespace và package_name của ứng dụng, cùng với sha256_cert_fingerprints — mảng dấu vân tay SHA256 của chứng chỉ ký).
// assetlinks.json — cấu hình tối thiểu của App Link
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": [
"14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:AD:A4:C5:AD:6B:01:14:79:6B:CB:12:6B:21:39:6F:EA"
]
}
}]
Dấu vân tay SHA256 được lấy từ chứng chỉ đã ký ứng dụng. Đối với bản dựng gỡ lỗi, chứng chỉ gỡ lỗi tiêu chuẩn Android được sử dụng; đối với bản dựng phát hành, chứng chỉ từ Google Play Console hoặc của riêng bạn. Quan trọng: khi thay đổi chứng chỉ ký (ví dụ: khi chuyển sang App Signing by Google Play), cần cập nhật assetlinks.json trên máy chủ, nếu không App Link sẽ ngừng hoạt động.
Android xác thực App Link ở lần nhấp đầu tiên vào liên kết. Hệ thống tải assetlinks.json từ máy chủ, so sánh package_name và dấu vân tay SHA256 với chứng chỉ của ứng dụng đã cài đặt. Nếu dữ liệu khớp, Android đánh dấu Intent Filter là đã xác thực và tất cả các liên kết tiếp theo đến tên miền này sẽ tự động mở, không có hộp thoại.
// AndroidManifest.xml — Intent Filter cho App Link
<activity
android:name=".ui.ProductActivity"
android:exported="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" />
<data
android:scheme="https"
android:host="example.com"
android:pathPrefix="/product" />
</intent-filter>
</activity>
autoVerify="true" là thuộc tính bắt buộc yêu cầu Android xác thực assetlinks.json. Nếu không có thuộc tính này, Intent Filter sẽ không được xác thực và App Link sẽ không được kích hoạt. Android hỗ trợ nhiều Intent Filter trong một Activity — cho các máy chủ khác nhau. Hệ thống kiểm tra từng máy chủ riêng biệt. Việc xác thực được thực hiện không đồng bộ và có thể mất đến 20 giây ở lần nhấp đầu tiên.
Sau khi xác thực thành công, Android tự động mở ứng dụng khi nhấp vào bất kỳ liên kết nào khớp với Intent Filter đã xác thực. Người dùng không thấy hộp thoại chọn — ứng dụng mở ngay lập tức. Nếu ứng dụng chưa được cài đặt, liên kết sẽ mở trong trình duyệt (như một trang web thông thường). Đây là trải nghiệm người dùng lý tưởng: chuyển đổi liền mạch mà không có thao tác không cần thiết.
Quan trọng: chuyển hướng tự động chỉ hoạt động với lược đồ https. App Link không hỗ trợ http (giao thức không bảo mật). Nếu người dùng mở thủ công liên kết http (ví dụ: từ SMS), Android không thực hiện xác thực và hiển thị hộp thoại chọn. Nên sử dụng https cho tất cả các liên kết dẫn đến ứng dụng và cấu hình chuyển hướng HTTP sang HTTPS trên máy chủ.
App Link là sự tiến hóa của Deep Link trên Android, không phải sự thay thế. Sự khác biệt giữa chúng là cơ bản. Deep Link thông thường (Custom URL Scheme) hoạt động thông qua Intent Filter với lược đồ tùy chỉnh (myapp://) và không có autoVerify. Android không kiểm tra xem ứng dụng có thực sự được liên kết với lược đồ này hay không — bất kỳ ứng dụng nào cũng có thể đăng ký myapp:// và chặn các liên kết.
App Link giải quyết ba vấn đề của Deep Link. Thứ nhất: bảo mật — xác thực qua Digital Asset Links ngăn chặn việc chặn liên kết. Thứ hai: trải nghiệm người dùng — không có hộp thoại chọn làm tăng tỷ lệ chuyển đổi đến hành động mục tiêu lên 20–40%. Thứ ba: lập chỉ mục — Google lập chỉ mục các URL https của App Link và có thể hiển thị chúng trong kết quả tìm kiếm dưới dạng liên kết đến nội dung bên trong ứng dụng.
Tương thích: App Link hoạt động trên Android 6.0+ (99% thiết bị). Đối với Android 5.x (Lollipop), Deep Link thông thường với hộp thoại chọn được sử dụng. Do đó, nên hỗ trợ cả hai cơ chế: App Link cho thiết bị hiện đại và Custom URL Scheme làm dự phòng cho các phiên bản cũ. Intent Filter với autoVerify="true" không phá vỡ tương thích ngược — trên Android < 6, thuộc tính bị bỏ qua.
| Đặc điểm | Deep Link | App Link |
|---|---|---|
| Lược đồ | Tùy chỉnh (myapp://) | HTTPS (https://domain) |
| Xác thực | Không | assetlinks.json |
| Hộp thoại chọn | Hiển thị | Chuyển hướng tự động |
| Phiên bản Android | API 1+ | API 23+ (6.0+) |
| Lập chỉ mục Google | Không | Có (URL https) |
Thiết lập App Link yêu cầu ba bước: cấu hình Intent Filter trong tệp kê khai, đặt assetlinks.json trên máy chủ và xác minh xác thực. Bước đầu tiên là thêm Intent Filter với android:autoVerify="true" trong AndroidManifest.xml. Điều quan trọng là chỉ định lược đồ https, máy chủ và các đường dẫn mà ứng dụng sẽ xử lý. Các đường dẫn có thể chứa ký tự đại diện (*) cho các thư mục con.
Bước thứ hai là tạo assetlinks.json. Tệp có thể được tạo qua Android Studio (Tools → App Links Assistant). Trợ lý cũng giúp gỡ lỗi và kiểm thử. Tệp được đặt trên máy chủ tại /.well-known/assetlinks.json. Máy chủ phải trả về Content-Type: application/json và có thể truy cập qua HTTPS mà không có chuyển hướng. Google Play Console cũng hiển thị trạng thái xác thực App Link trong phần Publishing.
Kiểm thử — bước thứ ba. Sử dụng adb để kiểm tra: lệnh adb shell am start -W -a android.intent.action.VIEW -d “https://example.com/product/42” mở ứng dụng. Nếu trình duyệt mở thay vì ứng dụng, hãy kiểm tra assetlinks.json và autoVerify. Android Studio App Links Assistant có trình kiểm thử tích hợp: nó hiển thị trạng thái xác thực cho từng tên miền và đường dẫn. Để kiểm thử tự động, sử dụng Android Testing Library với Intent Matcher.
Android 12 (API 31) đã đưa ra các thay đổi trong xử lý App Link. Một xác thực mới dành riêng cho tên miền đã được thêm vào: hệ thống kiểm tra từng liên kết riêng lẻ, không phải toàn bộ Intent Filter. Điều này cải thiện bảo mật nhưng yêu cầu cập nhật tệp assetlinks.json khi thêm đường dẫn mới. Android 12 cũng giới thiệu Android App Links Assistant đi kèm với ADB — các lệnh để quản lý xác thực qua shell.
Nhiều tên miền là kịch bản điển hình cho môi trường sản xuất. Ứng dụng có thể xử lý các liên kết từ example.com, m.example.com và example.org. Mỗi tên miền cần một assetlinks.json riêng trên máy chủ tương ứng. Trong tệp kê khai, nhiều Intent Filter được thêm vào — một cho mỗi tên miền. Tất cả các tên miền phải có thể truy cập qua HTTPS và vượt qua xác thực độc lập.
App Link và Jetpack Navigation là cách được khuyến nghị để xử lý App Link trong các ứng dụng Android hiện đại. Jetpack Navigation hỗ trợ deep link khai báo trong nav_graph.xml hoặc qua NavDeepLinkRequest. Điều này đơn giản hóa điều hướng: nhà phát triển mô tả màn hình nào mở cho một URL nhất định và thành phần Navigation tự xử lý Intent và khôi phục ngăn xếp điều hướng. Google khuyến nghị sử dụng Jetpack Navigation cho App Link.
// Xử lý App Link qua Jetpack Navigation
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
handleDeepLink(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
handleDeepLink(intent)
}
private fun handleDeepLink(intent: Intent) {
intent.data?.let { uri ->
navController.handleDeepLink(NavDeepLinkRequest
.Builder
.fromUri(uri)
.build()
)
}
}
}
Google Play Store kiểm tra App Link khi xuất bản. Nếu tệp kê khai chứa Intent Filter với autoVerify nhưng assetlinks.json không khả dụng hoặc không chính xác, Google Play có thể từ chối bản cập nhật với cảnh báo. Trong bảng điều khiển nhà phát triển (Policy and Programs → App Links), trạng thái xác thực của từng tên miền được hiển thị. Trước khi xuất bản, hãy luôn kiểm tra trạng thái — việc sửa chữa sau khi từ chối cập nhật sẽ làm trì hoãn việc phát hành.
Các câu hỏi thường gặp
App Link là Deep Link với xác thực qua Digital Asset Links. Sự khác biệt chính: App Link sử dụng lược đồ https thay vì lược đồ tùy chỉnh, không hiển thị hộp thoại chọn và được Google lập chỉ mục. Deep Link thông thường hoạt động trên tất cả các phiên bản Android nhưng yêu cầu chọn ứng dụng thủ công.
Tệp được đặt tại thư mục gốc của máy chủ HTTPS tại /.well-known/assetlinks.json. Máy chủ phải trả về Content-Type: application/json. Tệp cần được cập nhật khi thay đổi chứng chỉ ký hoặc thêm tên miền mới.
Nguyên nhân chính: thiếu android:autoVerify="true" trong Intent Filter, assetlinks.json không khả dụng qua HTTPS, dấu vân tay SHA256 không chính xác, chứng chỉ ký khác (debug vs release). Kiểm tra trạng thái xác thực qua adb shell dumpsync domain_verification.
Không — App Link yêu cầu máy chủ HTTPS với assetlinks.json có thể truy cập. Nếu bạn không có tên miền, hãy sử dụng Firebase Hosting hoặc GitHub Pages để lưu trữ tệp. Giải pháp thay thế: Custom URL Scheme (không xác thực) hoặc Firebase Dynamic Links.
Không — App Link được hỗ trợ trên Android 6.0 (API 23) trở lên. Trên Android 5, Intent Filter với android:autoVerify="true" bỏ qua thuộc tính và hoạt động như Deep Link thông thường với hộp thoại chọn. Nên hỗ trợ cả hai cơ chế để tương thích ngược.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm