Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Bạn bấm vào một liên kết sản phẩm trong tin nhắn và ứng dụng mở thẳng trang sản phẩm đó. Đó là deep link. Tính năng này giúp quảng cáo, email, thông báo và chia sẻ dẫn người dùng đúng chỗ cần đến, thay vì chỉ mở màn hình chủ.
myapp://product/42. Dễ cấu hình nhưng bất kỳ ứng dụng nào cũng có thể đăng ký cùng scheme, và nếu chưa cài ứng dụng thì liên kết không làm gì hữu ích.https://example.com/product/42) được xác minh quyền sở hữu tên miền để mở thẳng ứng dụng, không hiện hộp chọn.Với sản phẩm thật, hãy ưu tiên App Links và Universal Links vì an toàn hơn và quay về trang web khi chưa cài ứng dụng.
Để hệ điều hành tin rằng ứng dụng thuộc về tên miền đó, bạn đặt một tệp JSON trên máy chủ web.
Trên Android, tệp assetlinks.json nằm ở /.well-known/assetlinks.json:
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": ["AA:BB:CC:...:ZZ"]
}
}
]
Trên iOS, tệp apple-app-site-association khai báo ứng dụng nào xử lý đường dẫn nào, và ứng dụng khai báo tên miền liên kết (Associated Domains) trong cấu hình dự án. Cả hai tệp phải truy cập được qua HTTPS không chuyển hướng.
<activity android:name=".MainActivity" 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>
Khi nhận liên kết, ứng dụng cần phân tích đường dẫn và điều hướng đến màn hình tương ứng. Với Flutter dùng go_router, đường dẫn khai báo sẵn sẽ tự khớp:
GoRoute(
path: '/product/:id',
builder: (context, state) =>
ProductPage(id: state.pathParameters['id']!),
),
Với React Navigation, bạn cấu hình thuộc tính linking để ánh xạ đường dẫn vào các màn hình:
const linking = {
prefixes: ['https://example.com', 'myapp://'],
config: {
screens: {
Home: '',
Product: 'product/:id',
},
},
};
<NavigationContainer linking={linking}>{/* ... */}</NavigationContainer>
Bạn có thể thử bằng dòng lệnh. Với Android dùng adb:
adb shell am start -a android.intent.action.VIEW -d "https://example.com/product/42"
Với iOS, dùng lệnh xcrun simctl openurl trên trình giả lập hoặc dán liên kết vào ghi chú rồi bấm. Nhớ kiểm tra cả trường hợp ứng dụng bị đóng hoàn toàn.
Deep link nối liền web, quảng cáo và ứng dụng, làm trải nghiệm liền mạch. Ưu tiên liên kết HTTPS được xác minh, ánh xạ rõ ràng đường dẫn vào màn hình và kiểm thử đủ ba trạng thái của ứng dụng.
Deep link không chỉ để chia sẻ. Email đặt lại mật khẩu mở thẳng màn hình nhập mật khẩu mới, mã QR dẫn tới một sản phẩm, thông báo đẩy mở đúng cuộc trò chuyện, chiến dịch quảng cáo dẫn đến trang khuyến mại. Hãy lên danh sách các đường dẫn quan trọng của ứng dụng và thiết kế sơ đồ URL từ đầu, giữ chúng ổn định theo thời gian vì liên kết đã gửi ra ngoài không thể thu hồi. Khi đổi cấu trúc màn hình, vẫn nên giữ đường dẫn cũ hoạt động hoặc chuyển hướng sang đường dẫn mới.
Một bài toán thực tế là người dùng bấm liên kết khi chưa cài ứng dụng. Nếu chỉ mở trang web, họ có thể mất ngữ cảnh sau khi cài. Các dịch vụ liên kết trì hoãn (deferred deep link) giải quyết bằng cách ghi nhớ đích đến và mở đúng màn hình sau lần chạy đầu tiên. Bạn có thể dùng dịch vụ bên thứ ba hoặc tự xây bằng tham số tham chiếu của cửa hàng, nhưng hãy cân nhắc quyền riêng tư và quy định về theo dõi.
Để học cách tích hợp ứng dụng với web và máy chủ, bạn có thể xem các khóa học tại codebem.com.
Nguyễn Đình Cường
0 comment