Liên kết Sâu bị Trì hoãn Mở rộng của Android
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.
Để 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 trình nghe API Nhận Dữ liệu Chuyển đổi
AppsFlyerConversionListener
.Mặc dù tất cả các phương thức của trình nghe phải được thực hiện
onAppOpenAttribution
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
AppsFlyerConversionListener conversionListener = new AppsFlyerConversionListener() {
@Override
public void onConversionDataSuccess(Map<String, Object> conversionDataMap) {
String status = Objects.requireNonNull(conversionDataMap.get("af_status")).toString();
if(status.equals("Non-organic")){
if( Objects.requireNonNull(conversionDataMap.get("is_first_launch")).toString().equals("true")){
Log.d(LOG_TAG,"Conversion: First Launch");
//Deferred deep link in case of a legacy link
if(conversionDataMap.containsKey("fruit_name")){
if (conversionDataMap.containsKey("deep_link_value")) { //Not legacy link
Log.d(LOG_TAG,"onConversionDataSuccess: Link contains deep_link_value, deep linking with UDL");
}
else{ //Legacy link
conversionDataMap.put("deep_link_value", conversionDataMap.get("fruit_name"));
String fruitNameStr = (String) conversionDataMap.get("fruit_name");
DeepLink deepLinkData = mapToDeepLinkObject(conversionDataMap);
goToFruit(fruitNameStr, deepLinkData);
}
}
} else {
Log.d(LOG_TAG,"Conversion: Not First Launch");
}
} else {
Log.d(LOG_TAG, "Conversion: This is an organic install.");
}
}
@Override
public void onConversionDataFail(String errorMessage) {
Log.d(LOG_TAG, "error getting conversion data: " + errorMessage);
}
@Override
public void onAppOpenAttribution(Map<String, String> attributionData) {
Log.d(LOG_TAG, "onAppOpenAttribution: This is fake call.");
}
@Override
public void onAttributionFailure(String errorMessage) {
Log.d(LOG_TAG, "error onAttributionFailure : " + errorMessage);
}
};
⇲ Liên kết Github: Java
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.
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, tới Google Play hoặc một 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ừ Android Studio 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
onDeepLinking
. 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.
-
Đã khởi tạo SDK:
D/AppsFlyer_6.9.0: Initializing AppsFlyer SDK: (v6.9.0.126)
-
Nhật ký sau đề cập đến liên kết sâu trực tiếp và có thể được bỏ qua trong trường hợp liên kết sâu bị trì hoãn:
D/AppsFlyer_6.9.0: No deep link detected
-
API UDL bắt đầu:
D/AppsFlyer_6.9.0: [DDL] start
-
UDL gửi truy vấn tới AppsFlyer để truy vấn kết quả khớp với cài đặt này:
D/AppsFlyer_6.9.0: [DDL] Preparing request 1 ... I/AppsFlyer_6.9.0: call = https://dlsdk.appsflyer.com/v1.0/android/com.appsflyer.onelink.appsflyeronelinkbasicapp?af_sig=<>&sdk_version=6.9; size = 239 bytes; body = { ... TRUNCATED ... }
-
UDL đã nhận được phản hồi và gọi lệnh gọi lại
onDeepLinking
vớistatus=FOUND
và dữ liệu liên kết OneLink:D/AppsFlyer_6.9.0: [DDL] Calling onDeepLinking with: {"deepLink":"{\"campaign_id\":\"\",\"af_sub3\":\"\",\"match_type\":\"probabilistic\",\"af_sub1\":\"\",\"deep_link_value\":\"\",\"campaign\":\"\",\"af_sub4\":\"\",\"timestamp\":\"2022-12-07T09:32:52.256\",\"click_http_referrer\":\"\",\"af_sub5\":\"\",\"media_source\":\"\",\"af_sub2\":\"\",\"is_deferred\":true}","status":"FOUND"}
-
GCD đang tìm nạp dữ liệu chuyển đổi:
GET:https://gcdsdk.appsflyer.com/install_data/v4.0/com.appsflyer.onelink.appsflyeronelinkbasicapp?devkey=XXXXXXXXX&device_id=1670405582645-822555416155480367
onConversionDataSuccess
được gọi ra với dữ liệu chuyển đổi làm đầu vào:
D/AppsFlyer_6.9.0: [GCD-A02] Calling onConversionDataSuccess with:
{
...
is_first_launch=true,
...
fruit_amount=56,
fruit_name=apples,
...
af_status=Non-organic,
...
}
Đã cập nhật 10 tháng trước