Liên kết Sâu Hợp nhất của Android
Khái quát: Liên kết sâu hợp nhất (UDL) cho phép bạn đưa người dùng mới và người dùng hiện có đến một hoạt động trong ứng dụng cụ thể (ví dụ: một trang cụ thể trong ứng dụng) ngay sau khi ứng dụng được mở.
Bảo vệ quyền riêng tư UDL
For new users, the UDL method only returns parameters relevant to deferred deep linking:
deep_link_value
anddeep_link_sub1-10
. If you try to get any other parameters (media_source
,campaign
,af_sub1-5
, v.v.), chúng sẽ trả về giá trị rỗng.
Quy trình
Quy trình này hoạt động như sau:
- Người dùng nhấp vào liên kết OneLink.
- Nếu người dùng đã cài đặt ứng dụng, Liên kết Ứng dụng Android hoặc lược đồ URI sẽ mở ứng dụng.
- Nếu người dùng chưa cài đặt ứng dụng thì họ sẽ được chuyển hướng đến cửa hàng ứng dụng và sau khi tải xuống, người dùng sẽ mở ứng dụng.
- Ứng dụng mở ra sẽ kích hoạt SDK AppsFlyer.
- SDK AppsFlyer sẽ chạy API UDL.
- API UDL truy xuất dữ liệu OneLink từ máy chủ AppsFlyer.
- The UDL API calls back the
onDeepLinking()
phương thức trong các thông sốDeepLinkingListener
class. - The
onDeepLinking()
method gets aDeepLinkResult
object. - The
DeepLinkResult
object includes:- Trạng thái (Đã tìm thấy/Không tìm thấy/Lỗi)
- A
DeepLink
object that carries thedeep_link_value
anddeep_link_sub1-10
mà nhà phát triển sử dụng để định tuyến người dùng đến một hoạt động trong ứng dụng cụ thể, đây là mục tiêu chính của OneLink.
Lập kế hoạch
- UDL yêu cầu AppsFlyer Android SDK V6.1 trở lên.
Khi thiết lập OneLink, nhà tiếp thị sử dụng các thông số để tạo liên kết và nhà phát triển tùy chỉnh hành vi của ứng dụng dựa trên các giá trị nhận được. Nhà phát triển có trách nhiệm đảm bảo các thông số được xử lý chính xác trong ứng dụng, cho cả định tuyến trong ứng dụng và cá nhân hóa dữ liệu trong liên kết.
Để lập kế hoạch OneLink:
- Nhận từ nhà tiếp thị hành vi mong đợi và trải nghiệm cá nhân mà người dùng có được khi họ nhấp vào URL.
- Based on the desired behavior, plan the
deep_link_value
and other parameters that are needed to give the user the desired personal experience.- The
deep_link_value
is set by the marketer in the URL and used by the developer to redirect the user to a specific place inside the app. For example, if you have a fruit store and want to direct users to apples, the value ofdeep_link_value
can beapples
. - The
deep_link_sub1-10
parameters can also be added to the URL to help personalize the user experience. For example, to give a 10% discount, the value ofdeep_link_sub1
can be10
.
- The
Thực hiện
Let's save you some time >>
Set Deep Linking with our SDK integration wizard
Thực hiện logic API UDL dựa trên các thông số và giá trị đã chọn.
- Sử dụng phương thức
subscribeForDeepLink()
(từAppsFlyerLib
), before calling start, to register theDeepLinkListener
trình nghe. - Đảm bảo bạn ghi đè hàm gọi lại
onDeepLinking()
.
onDeepLinking()
chấp nhận làm đối số cho mộtDeepLinkResult
object. - Use
getStatus()
to query whether the deep linking match is found. - For when the status is an error, call
getError()
and run your error flow. - For when the status is found, use
getDeepLink()
to retrieve theDeepLink
object.
TheDeepLink
đối tượng chứa thông tin liên kết sâu và các hàm trợ giúp để dễ dàng truy xuất các giá trị từ các mã khoá OneLink phổ biến, ví dụ nhưgetDeepLinkValue()
. - Use
getDeepLinkValue()
to retrieve thedeep_link_value
. - Use
getStringValue("deep_link_sub1")
to retrievedeep_link_sub1
. Do the same fordeep_link_sub2-10
parameters, changing the string value as required. - Once
deep_link_value
anddeep_link_sub1-10
are retrieved, pass them to an in-app router and use them to personalize the user experience.
Lưu ý
onDeepLinking
không được gọi ra khi ứng dụng đang chạy ngầm và LaunchMode của Ứng dụng không phải là tiêu chuẩn.
Để sửa lỗi này, hãy gọi ra phương thứcsetIntent(intent)
phương thức để đặt giá trị ý định bên trong phương thức bị ghi đèonNewIntent
nếu ứng dụng đang sử dụng LaunchMode không tiêu chuẩn.import android.content.Intent; ... ... ... @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); }
Supporting legacy OneLink links
OneLink cũ là các liên kết không chứa các thông số được đề xuất cho UDL: deep_link_value
and deep_link_sub1-10
.
Thông thường, đây là những liên kết đã tồn tại và đang được sử dụng khi di chuyển từ các phương thức cũ sang UDL.
Người dùng tin tức sử dụng các liên kết cũ sẽ được xử lý bởi onConversionDataSuccess
trong ngữ cảnh Liên kết Sâu bị Trì hoãn Mở rộng.
UDL xử lý liên kết sâu cho người dùng hiện có. Trong trường hợp này, bạn nên thêm hỗ trợ trong lệnh gọi lại UDL onDeepLinking
cho các thông số cũ.
Ví dụ mã Java
Code example
appsflyer.subscribForDeepLink(new DeepLinkListen
@Override
public void onDeepLinking(@NonNull DeepLinkResult deepLinkResult) {
DeepLinkResult.Status dlStatus = deepLinkResult.getStatus();
if (dlStatus == DeepLinkResult.Status.FOUND) {
Log.d(LOG_TAG, "Deep link found");
} else if (dlStatus == DeepLinkResult.Status.NOT_FOUND) {
Log.d(LOG_TAG, "Deep link not found");
return;
} else {
// dlStatus == DeepLinkResult.Status.ERROR
DeepLinkResult.Error dlError = deepLinkResult.getError();
Log.d(LOG_TAG, "There was an error getting Deep Link data: " + dlError.toString());
return;
}
DeepLink deepLinkObj = deepLinkResult.getDeepLink();
try {
Log.d(LOG_TAG, "The DeepLink data is: " + deepLinkObj.toString());
} catch (Exception e) {
Log.d(LOG_TAG, "DeepLink data came back null");
return;
}
// An example for using is_deferred
if (deepLinkObj.isDeferred()) {
Log.d(LOG_TAG, "This is a deferred deep link");
} else {
Log.d(LOG_TAG, "This is a direct deep link");
}
// ** Next if statement is optional **
// Our sample app's user-invite carries the referrerID in deep_link_sub2
// See the user-invite section in FruitActivity.java
if (dlData.has("deep_link_sub2")){
referrerId = deepLinkObj.getStringValue("deep_link_sub2");
Log.d(LOG_TAG, "The referrerID is: " + referrerId);
} else {
Log.d(LOG_TAG, "deep_link_sub2/Referrer ID not found");
}
// An example for using a generic getter
String fruitName = "";
try {
fruitName = deepLinkObj.getDeepLinkValue();
Log.d(LOG_TAG, "The DeepLink will route to: " + fruitName);
} catch (Exception e) {
Log.d(LOG_TAG, "Custom param fruit_name was not found in DeepLink data");
return;
}
goToFruit(fruitName, deepLinkObj);
}
});
AppsFlyerLib.getInstance().subscribeForDeepLink(object : DeepLinkListener{
override fun onDeepLinking(deepLinkResult: DeepLinkResult) {
when (deepLinkResult.status) {
DeepLinkResult.Status.FOUND -> {
Log.d(
LOG_TAG,"Deep link found"
)
}
DeepLinkResult.Status.NOT_FOUND -> {
Log.d(
LOG_TAG,"Deep link not found"
)
return
}
else -> {
// dlStatus == DeepLinkResult.Status.ERROR
val dlError = deepLinkResult.error
Log.d(
LOG_TAG,"There was an error getting Deep Link data: $dlError"
)
return
}
}
var deepLinkObj: DeepLink = deepLinkResult.deepLink
try {
Log.d(
LOG_TAG,"The DeepLink data is: $deepLinkObj"
)
} catch (e: Exception) {
Log.d(
LOG_TAG,"DeepLink data came back null"
)
return
}
// An example for using is_deferred
if (deepLinkObj.isDeferred == true) {
Log.d(LOG_TAG, "This is a deferred deep link");
} else {
Log.d(LOG_TAG, "This is a direct deep link");
}
try {
val fruitName = deepLinkObj.deepLinkValue
Log.d(LOG_TAG, "The DeepLink will route to: $fruitName")
} catch (e:Exception) {
Log.d(LOG_TAG, "There's been an error: $e");
return;
}
}
})
⇲ Liên kết Github: Java
Thử nghiệm liên kết sâu bị trì hoãn
Prerequisites
- Hoàn thành tích hợp UDL
- Đăng ký thiết bị thử nghiệm
- 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
- Yêu cầu nhà tiếp thị của bạn cung cấp mẫu OneLink.
- Nó sẽ có dạng như thế này:
https://onelink-basic-app.onelink.me/H5hv
. - Ví dụ này sử dụng tên miền phụ OneLink
onelink-basic-app.onelink.me
và ID mẫu OneLinkH5hv
- Nó sẽ có dạng như thế này:
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 một liên kết hiện có
- 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ố OneLink
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?pid=my_media_source&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, bạn sẽ thấy hình ảnh này:
- 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, bạn sẽ thấy hình ảnh này:
- 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
.
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ả so khớp với lượt 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\":\"apples\",\"campaign\":\"\",\"af_sub4\":\"\",\"timestamp\":\"2022-12-06T11:47:40.037\",\"click_http_referrer\":\"\",\"af_sub5\":\"\",\"media_source\":\"\",\"af_sub2\":\"\",\"deep_link_sub1\":\"23\",\"is_deferred\":true}","status":"FOUND"}
Thử nghiệm liên kết sâu (Liên kết Ứng dụng Android)
Prerequisites
- Hoàn thành tích hợp UDL
- Đăng ký thiết bị thử nghiệm
- Bật chế độ gỡ lỗi trong ứng dụng
- Đảm bảo ứng dụng đã được cài đặt trên thiết bị của bạn
- Yêu cầu nhà tiếp thị của bạn cung cấp mẫu OneLink.
- Nó sẽ có dạng như thế này
https://onelink-basic-app.onelink.me/H5hv
. - Ví dụ này sử dụng tên miền phụ OneLink
onelink-basic-app.onelink.me
và ID mẫu OneLinkH5hv
.
- Nó sẽ có dạng như thế này
- Cấu hình Liên kết Ứng dụng Android.
Create the test link
Sử dụng cùng một phương thức như trong liên kết sâu bị trì hoãn.
Perform the test
- Nhấp vào liên kết trên thiết bị của bạn.
- UDL phát hiện Liên kết Ứng dụng Android và truy xuất các thông số OneLink để gọi lại
onDeepLinking
.
Expected logs results
Các nhật ký sau chỉ khả dụng khi chế độ gỡ lỗi được bật.
- Nếu liên kết là liên kết rút gọn OneLink (ví dụ: https://onelink-basic-app.onelink.me/H5hv/apples)
D/AppsFlyer_6.9.0: HTTP: [258990367] GET:https://onelink.appsflyer.com/shortlink-sdk/v2/H5hv?id=apples
- UDL gọi ra lệnh gọi lại
onDeepLinking
vớistatus=FOUND
và dữ liệu liên kết OneLinkD/AppsFlyer_6.9.0: [DDL] Calling onDeepLinking with: {"deepLink":"{\"path\":\"\\\/H5hv\",\"scheme\":\"https\",\"link\":\"https:\\\/\\\/onelink-basic-app.onelink.me\\\/H5hv?deep_link_value=apples&deep_link_sub1=23\",\"host\":\"onelink-basic-app.onelink.me\",\"deep_link_sub1\":\"23\",\"deep_link_value\":\"apples\",\"is_deferred\":false}","status":"FOUND"}
Mách nhỏ
Nếu khi nhấp vào Liên kết Ứng dụng Android, HĐH hiển thị Hộp thoại Định hướng hoặc chuyển hướng đến Google Play hoặc một trang web, hãy kiểm tra xem chữ ký SHA256 có đúng hay không.
- Use
adb
để lấy chữ ký ứng dụng trên thiết bị:adb shell pm get-app-links <PACKAGE_NAME>
-2. Đảm bảo miền phụ là
verified
.
- Nếu miền phụ chưa được xác minh, nó sẽ hiển thị
1024
.
Đã cập nhật 3 tháng trước