Liên kết Sâu bị Trì hoãn Mở rộng iOS
Tổng quan
Liên kết sâu bị trì hoãn mở rộng cho phép liên kết sâu cho người dùng mới trong một số trường hợp nhất định:
- Khi UDL trả về
NOT_FOUND
even though a relevant install occurred.
Main example for such a scenario:- Thời gian giữa thời điểm nhấp chuột và cài đặt vượt quá khung thời gian xem lại UDL (15 phút).
- Khi UDL trả về
FOUND
nhưng dữ liệu liên kết sâu bị thiếu thông số, không phải làdeep_link_value
anddeep_link_sub1-10
.
Các ví dụ chính cho các tình huống như vậy:- Clicking a link in a Self Reporting Network (SRN), like Meta ads or Twitter.
- Nhấp vào một liên kết không chứa
deep_link_value
ordeep_link_sub1-10
được sử dụng để liên kết sâu, ví dụ như các liên kết cũ được tạo trước khideep_link_value
tồn tại vẫn đang được sử dụng. - Thời gian giữa thời điểm nhấp chuột và cài đặt vượt quá khung thời gian xem lại UDL (15 phút).
Để cho phép liên kết sâu bị trì hoãn khi UDL trả về NOT_FOUND
, onConversionDataSuccess
lệnh gọi lại cần kiểm tra xem nó có nên xử lý liên kết sâu bị trì hoãn hay không.
onConversionDataSuccess
là một phần của API Lấy Dữ liệu Chuyển đổi (GCD). Mục đích chính của nó là thu thập dữ liệu chuyển đổi bên trong thiết bị.
Trong trường hợp sử dụng được nêu ở đây onConversionDataSuccess
tận dụng thực tế là tất cả các thông số liên kết sâu bị trì hoãn đều được chuyển đến lệnh gọi lại, bên trên dữ liệu chuyển đổi.
Điều kiện tiên quyết
- Triển khai Liên kết Sâu Hợp nhất để xử lý cả liên kết sâu bị trì hoãn và liên kết sâu trực tiếp.
- Triển khai
onConversionDataSuccess
để xử lý liên kết sâu bị trì hoãn bằng cách sử dụng API GCD.
Thực hiện
onConversionDataSuccess
nên phát hiện các trường hợp xảy ra liên kết sâu bị trì hoãn mà UDL không xử lý.Xem phân tích mã chi tiết
onConversionDataSuccess
nên định tuyến người dùng đến đích liên kết sâu bị trì hoãn dựa trên các thông số liên kết sâu được chuyển đến lệnh gọi lại.
Ví dụ về mã
Code dissect
- Triển khai ủy quyền API Nhận Dữ liệu Chuyển đổi
AppsFlyerLibDelegate
.Chỉ triển khai
onConversionDataSuccess
andonConversionDataFail
.
Các phương thứconAppOpenAttribution
andonAttributionFailure
loại trừ lẫn nhau với UDL và sẽ không được gọi ra. - Phát hiện các tình huống liên kết sâu bị trì hoãn bằng cách lọc tải trọng dữ liệu chuyển đổi bằng:
af_status == Non-organic
is_first_launch == true
- Khi phát hiện liên kết sâu bị trì hoãn, hãy lọc ra các trường hợp đã được UDL xử lý.
Trong ví dụ sau, tất cả các liên kết chứadeep_link_value
.
UDL nên báo hiệu bằng cờ báo cho biết liên kết sâu bị trì hoãn đã được xử lý vàonConversionDataSuccess
nên bỏ qua. onConversionDataSuccess
phải xác minh dữ liệu chuyển đổi chứa các thông số được sử dụng để định tuyến người dùng bên trong ứng dụng. Ví dụ:fruit_name
trong ví dụ sau đây.- Định tuyến người dùng đến đích liên kết sâu bị trì hoãn.
Code snippet
extension AppDelegate: AppsFlyerLibDelegate {
// Handle Organic/Non-organic installation
func onConversionDataSuccess(_ data: [AnyHashable: Any]) {
ConversionData = data
print("onConversionDataSuccess data:")
for (key, value) in data {
print(key, ":", value)
}
if let conversionData = data as NSDictionary? as! [String:Any]? {
if let status = conversionData["af_status"] as? String {
if (status == "Non-organic") {
if let sourceID = conversionData["media_source"],
let campaign = conversionData["campaign"] {
NSLog("[AFSDK] This is a Non-Organic install. Media source: \(sourceID) Campaign: \(campaign)")
}
} else {
NSLog("[AFSDK] This is an organic install.")
}
if let is_first_launch = conversionData["is_first_launch"] as? Bool,
is_first_launch {
NSLog("[AFSDK] First Launch")
if !conversionData.keys.contains("deep_link_value") && conversionData.keys.contains("fruit_name"){
switch conversionData["fruit_name"] {
case let fruitNameStr as String:
NSLog("This is a deferred deep link opened using conversion data")
walkToSceneWithParams(fruitName: fruitNameStr, deepLinkData: conversionData)
default:
NSLog("Could not extract deep_link_value or fruit_name from deep link object using conversion data")
return
}
}
} else {
NSLog("[AFSDK] Not First Launch")
}
}
}
}
func onConversionDataFail(_ error: Error) {
NSLog("[AFSDK] \(error)")
}
}
⇲ Liên kết Github: Swift
Thử nghiệm
Quan trọng
Trường hợp thử nghiệm sau đây minh họa việc xử lý liên kết sâu bị trì hoãn từ các liên kết có chứa thông số tùy chỉnh nhưng không chứa thông số
deep_link_value
anddeep_link_sub1-10
.
Trường hợp thử nghiệm này cũng phù hợp với tất cả liên kết sâu bị trì hoãn mở rộng được mô tả trước đó.
Before you begin
- Hoàn thành việc triển khai được mô tả trước đó.
- Đăng ký thiết bị thử nghiệm của bạn.
- Bật chế độ gỡ lỗi trong ứng dụng.
- Đảm bảo ứng dụng chưa được cài đặt trên thiết bị của bạn.
The test link
Bạn có thể sử dụng một liên kết OneLink hiện có hoặc yêu cầu nhà tiếp thị tạo một liên kết mới để thử nghiệm. Có thể sử dụng cả URL OneLink rút gọn và đầy đủ.
Thêm thông số đặc biệt vào liên kết
- Chỉ sử dụng miền và mẫu OneLink của liên kết của bạn, ví dụ:
https://onelink-basic-app.onelink.me/H5hv
. - Thêm thông số tùy chỉnh OneLink ngoài
deep_link_value
anddeep_link_sub1-10
, như ứng dụng của bạn dự kiến. - Các thông số nên được thêm dưới dạng thông số truy vấn.
- Ví dụ:
https://onelink-basic-app.onelink.me/H5hv?deep_link_value=apples&deep_link_sub1=23
- Ví dụ:
Perform the test
- Nhấp vào liên kết trên thiết bị của bạn.
- OneLink chuyển hướng bạn theo thiết lập liên kết, đến App Store hoặc trang web.
- Cài đặt ứng dụng.
Quan trọng
- Nếu ứng dụng vẫn đang được phát triển và chưa được tải lên cửa hàng, hình ảnh sau sẽ hiển thị:
- Cài đặt ứng dụng từ Xcode hoặc bất kỳ IDE nào khác mà bạn sử dụng.
- Nếu ứng dụng vẫn đang được phát triển và chưa được tải lên cửa hàng, hình ảnh sau sẽ hiển thị:
- UDL phát hiện liên kết sâu bị trì hoãn, so khớp lượt cài đặt với lượt nhấp và truy xuất các thông số OneLink cho lệnh gọi lại
didResolveDeepLink
. UDL sẽ không tìm thấy bất kỳ thông số nào để định tuyến và thoát. onConversionDataSuccess
lệnh gọi lại được gọi ra với dữ liệu chuyển đổi chứa cả thông số tùy chỉnh và dữ liệu phân bổ.onConversionDataSuccess
đặt các thông số tùy chỉnh để định tuyến người dùng bên trong ứng dụng.
Expected logs results
Các nhật ký sau chỉ khả dụng khi [chế độ gỡ lỗi được bật].(https://dev.appsflyer.com/hc/docs/integrate-ios-sdk#enabling-debug-mode)
-
Đã khởi tạo SDK:
[AppsFlyerSDK] [com.apple.main-thread] AppsFlyer SDK version 6.6.0 started build
-
API UDL bắt đầu:
[AppsFlyerSDK] [com.appsflyer.serial] [DDL] Start DDL
-
UDL gửi truy vấn tới dịch vụ AppsFlyer để truy vấn kết quả so khớp với lượt cài đặt này:
[AppsFlyerSDK] [com.appsflyer.serial] [DDL] URL: https://dlsdk.appsflyer.com/v1.0/ios/id1512793879?sdk_version=6.6&af_sig=c9a1d5b34d68e584d0db2a20f4049fb7cd2e785c3383bXXXXXXXXXXXXXXXXXXXXXXXX
-
UDL đã nhận được phản hồi và gọi lệnh gọi lại
didResolveDeepLink
vớistatus=FOUND
và dữ liệu liên kết OneLink:[AppsFlyerSDK] [com.appsflyer.serial] [DDL] Calling didResolveDeepLink with: {"af_sub4":"","click_http_referrer":"","af_sub1":"","click_event":{"af_sub4":"","click_http_referrer":"","af_sub1":"","af_sub3":"","deep_link_value":"","campaign":"","match_type":"probabilistic","af_sub5":"","campaign_id":"","media_source":"","af_sub2":""},"af_sub3":"","deep_link_value":"","campaign":"","match_type":"probabilistic","af_sub5":"","media_source":"","campaign_id":"","af_sub2":""}
-
GCD đang tìm nạp dữ liệu chuyển đổi:
[AppsFlyerSDK] [com.appsflyer.serial] [GCD-B01] GCD 4.0 URL: https://gcdsdk.appsflyer.com/install_data/v4.0/id1512793879?devkey=s*****4&device_id=1672050642148-9221195
onConversionDataSuccess
được gọi ra với dữ liệu chuyển đổi làm đầu vào:
[AppsFlyerSDK] [com.appsflyer.serial] [GCD-A02] -[basic_app.AppDelegate onConversionDataSuccess:]:
{
...
is_first_launch=true,
...
fruit_amount=56,
fruit_name=apples,
...
af_status=Non-organic,
...
}
Đã cập nhật 10 tháng trước