App Link: nó là gì, nguyên lý hoạt động và thiết lập

Tác giả: IT Sectr Đã đăng: 2026-05-14 Thời gian đọc: 9 phút

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 — liên kết https tự động mở ứng dụng mà không có hộp thoại chọn
  • Digital Asset Links — tệp JSON assetlinks.json trên máy chủ, xác thực kết nối của tên miền với ứng dụng
  • Dấu vân tay SHA256 của chứng chỉ — yếu tố xác thực chính liên kết nhà phát triển với tên miền
  • Intent Filter — thành phần Android khai báo liên kết nào ứng dụng xử lý
  • Bảo mật — App Link loại bỏ hộp thoại “Mở trong ứng dụng hay trình duyệt”, tăng tỷ lệ chuyển đổi

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.

Digital Asset Links (assetlinks.json)

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ý).

json
// 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.

Intent Filter và xác thực

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.

xml
// 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.

Chuyển hướng tự động

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ểmDeep LinkApp Link
Lược đồTùy chỉnh (myapp://)HTTPS (https://domain)
Xác thựcKhôngassetlinks.json
Hộp thoại chọnHiển thịChuyển hướng tự động
Phiên bản AndroidAPI 1+API 23+ (6.0+)
Lập chỉ mục GoogleKhôngCó (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.

  1. Thêm Intent Filter với android:autoVerify="true" trong AndroidManifest.xml
  2. Lấy dấu vân tay SHA256 của chứng chỉ (keytool hoặc App Links Assistant)
  3. Tạo assetlinks.json với package_name và sha256_cert_fingerprints
  4. Đặt tệp tại /.well-known/assetlinks.json trên máy chủ HTTPS
  5. Xác minh xác thực qua adb: adb shell dumpsync domain_verification

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.

Đặc điểm triển khai

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.

kotlin
// 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 khác Deep Link trên Android như thế nào?

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.

Nên đặt assetlinks.json ở đâu?

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.

Tại sao App Link không mở ứng dụng tự động?

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.

Có thể sử dụng App Link mà không có tên miền riêng không?

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.

App Link có hoạt động trên Android 5 không?

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

  • App Link — sự tiến hóa của Deep Link cho Android: liên kết https với chuyển đổi tự động sang ứng dụng
  • Digital Asset Links — xác thực mật mã qua assetlinks.json trên máy chủ
  • Dấu vân tay SHA256 của chứng chỉ ký — yếu tố chính liên kết nhà phát triển với tên miền
  • android:autoVerify="true" — thuộc tính Intent Filter bắt buộc để kích hoạt App Link
  • Bảo mật — App Link ngăn chặn việc chặn liên kết bởi ứng dụng bên thứ ba
  • Google Play Store kiểm tra xác thực App Link khi xuất bản và từ chối nếu có lỗi
  • Jetpack Navigation — cách được khuyến nghị để xử lý App Link với deep link khai báo

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.

Thảo luận dự án

Đọc thêm