API Cũ của Android
Liên kết sâu trực tiếp
Overview
Liên kết sâu trực tiếp chuyển hướng người dùng di động vào một hoạt động hoặc nội dung cụ thể trong ứng dụng khi ứng dụng đã được cài đặt.
Việc định tuyến trong ứng dụng này tới một hoạt động cụ thể trong ứng dụng có thể do các thông số được chuyển qua cho ứng dụng khi HĐH mở ứng dụng và onAppOpenAttribution
method is called. AppsFlyer's OneLink ensures that the correct value is passed along with the user's click, thus personalizing the user’s app experience.
Only the deep_link_value
is required for deep linking. However, other parameters and values (such as custom attribution parameters) can also be added to the link and returned by the SDK as deep linking data.
Luồng liên kết sâu trực tiếp hoạt động như sau:
- Người dùng nhấp vào URL rút gọn OneLink.
- Android khởi chạy ứng dụng dựa trên hoạt động có liên quan trong AndroidManifest.xml.
- AppsFlyer SDK được kích hoạt trong ứng dụng.
- AppsFlyer SDK truy xuất dữ liệu OneLink.
- Trong một URL rút gọn, dữ liệu được truy xuất từ API trình phân giải URL rút gọn trong máy chủ của AppsFlyer.
- Trong một URL đầy đủ, dữ liệu được truy xuất trực tiếp từ URL đầy đủ.
- AppsFlyer SDK triggers
onAppOpenAttribution()
with the retrieved parameters and cached attribution parameters (e.g.install_time
). - Asynchronously,
onConversionDataSuccess()
is called, holding the full cached attribution data. (You can exit this function by checking ifis_first_launch
istrue
.) onAppOpenAttribution()
sử dụng bản đồ attributionData để điều phối các hoạt động khác trong ứng dụng và chuyển các dữ liệu liên quan.- Điều này giúp tạo ra trải nghiệm được cá nhân hóa cho người dùng, đây là mục tiêu chính của OneLink.
Procedures
To implement the onAppOpenAttribution
và thiết lập các hành vi thông số, thì phải hoàn thành danh sách kiểm tra các quy trình hành động sau đây.
Danh sách kiểm tra quy trình
- Quyết định hoạt động của ứng dụng và
deep_link_value
(and other parameter names and values) - with the marketer - Lập kế hoạch giá trị đầu vào của phương thức, tức là
deep_link_value
(and other parameter names and values) - with the marketer - Triển khai các
onAppOpenAttribution()
logic - Triển khai các
onAttributionFailure()
logic
Quyết định hành vi của ứng dụng
Để quyết định hành vi của ứng dụng khi có người nhấp vào liên kết:
Nhận từ nhà tiếp thị: Hành vi mong đợi của liên kết khi có người nhấp vào liên kết đó.
Lập kế hoạch giá trị đầu vào của phương thức
When a OneLink is clicked and the user has the app installed on their device, the onAppOpenAttribution
method is called by the AppsFlyer SDK. This is referred to as a retargeting re-engagement.
The onAppOpenAttribution
nhận các biến làm giá trị đầu vào như sau: Map <String, String>
.
Cấu trúc dữ liệu đầu vào được mô tả tại đây.
Triển khai logic onAppOpenAttribution()
The deep link opens the onAppOpenAttribution
trong hoạt động chính. Các thông số OneLink trong đầu vào phương thức được sử dụng để triển khai trải nghiệm người dùng cụ thể khi ứng dụng được mở.
Mã ví dụ:
@Override
public void onAppOpenAttribution(Map<String, String> attributionData) {
if (!attributionData.containsKey("is_first_launch"))
Log.d(LOG_TAG, "onAppOpenAttribution: This is NOT deferred deep linking");
for (String attrName : attributionData.keySet()) {
String deepLinkAttrStr = attrName + " = " + attributionData.get(attrName);
Log.d(LOG_TAG, "Deeplink attribute: " + deepLinkAttrStr);
}
Log.d(LOG_TAG, "onAppOpenAttribution: Deep linking into " + attributionData.get("deep_link_value"));
goToFruit(attributionData.get("deep_link_value"), attributionData);
}
@Override
public void onAttributionFailure(String errorMessage) {
Log.d(LOG_TAG, "error onAttributionFailure : " + errorMessage);
}
private void goToFruit(String fruitName, Map<String, String> dlData) {
String fruitClassName = fruitName.concat("Activity");
try {
Class fruitClass = Class.forName(this.getPackageName().concat(".").concat(fruitClassName));
Log.d(LOG_TAG, "Looking for class " + fruitClass);
Intent intent = new Intent(getApplicationContext(), fruitClass);
if (dlData != null) {
// Map is casted HashMap since it is easier to pass serializable data to an intent
HashMap<String, String> copy = new HashMap<String, String>(dlData);
intent.putExtra(DL_ATTRS, copy);
}
startActivity(intent);
} catch (ClassNotFoundException e) {
Log.d(LOG_TAG, "Deep linking failed looking for " + fruitName);
e.printStackTrace();
}
}
⇲ Liên kết Github: Java
Lưu ý
onAppOpenAttribution
không được gọi ra khi ứng dụng đang chạy ngầm và Ứng dụngLaunchMode
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 không phải là ứng dụng tiêu chuẩnLaunchMode
.import android.content.Intent; ... ... ... @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); }
Triển khai logic onAttributionFailure()
The onAttributionFailure
method is called whenever the call to onAppOpenAttribution
fails. The function should report the error and create an expected experience for the user.
@Override
public void onAttributionFailure(String errorMessage) {
Log.d(LOG_TAG, "error onAttributionFailure : " + errorMessage);
}
⇲ Liên kết Github: Java
Liên kết sâu gián tiếp
Overview
Deferred deep linking, trước tiên, hướng người dùng mới đến đúng cửa hàng ứng dụng để cài đặt ứng dụng, sau đó, sau lần mở đầu tiên, đến trải nghiệm ứng dụng cụ thể (ví dụ: một trang cụ thể trong ứng dụng).
When the user first launches the app, the onConversionDataSuccess
callback function receives both the conversion data of the new user, and OneLink data. The OneLink data makes in-app routing possible due to the deep_link_value
hoặc ứng dụng khác được chuyển đến ứng dụng khi HĐH mở ứng dụng.
Only the deep_link_value
is required for deep linking. However, other parameters and values (such as custom attribution parameters) can also be added to the link and returned by the SDK as deep linking data. The AppsFlyer OneLink ensures that the correct parameters are passed along with the user's click, thus personalizing the user’s app experience.
The marketer and developer must coordinate regarding desired app behavior and deep_link_value
. The marketer uses the parameters to create deep links, and the developer customizes the behavior of the app based on the value received.
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.
Luồng liên kết sâu bị trì hoãn hoạt động như sau:
- Người dùng nhấp vào OneLink trên thiết bị chưa được cài đặt ứng dụng.
- AppsFlyer đăng ký lượt nhấp và chuyển hướng người dùng đến đúng cửa hàng ứng dụng hoặc trang đích.
- Người dùng cài đặt và khởi chạy ứng dụng.
- AppsFlyer SDK được khởi tạo và lượt cài đặt được phân bổ vào các máy chủ AppsFlyer.
- The SDK triggers the
onConversionDataSuccess
method. The function receives input that includes both thedeep_link_value
, and the attribution data/parameters defined in the OneLink data. - Tham số
is_first_launch
has the valuetrue
, báo hiệu luồng deferred deep link.
Nhà phát triển sử dụng dữ liệu nhận được trong hàmonConversionDataSuccess
để tạo trải nghiệm được cá nhân hóa cho người dùng trong lần đầu khởi chạy ứng dụng.
Procedures
To implement the onConversionDataSuccess
method and set up the parameter behaviors, the following action checklist of procedures need to be completed.
- Quyết định hoạt động của ứng dụng trong lần khởi chạy đầu tiên, và
deep_link_value
(and other parameter names and values) - with the marketer - Lập kế hoạch giá trị đầu vào của phương thức, tức là
deep_link_value
(and other parameter names and values) - with the marketer - Triển khai các
onConversionDataSuccess()
logic - Triển khai các
onConversionDataFail()
logic
Quyết định hành vi của ứng dụng trong lần khởi chạy đầu tiên
Để quyết định hành vi của ứng dụng trong lần khởi chạy đầu tiên:
Nhận từ nhà tiếp thị: Hành vi mong đợi của liên kết khi có người nhấp vào và ứng dụng mở lần đầu.
Lập kế hoạch giá trị đầu vào của phương thức
For deferred deep linking, the onConversionDataSuccess
method input must be planned and the input decided in the previous section (for deep linking) is made relevant for the first time the app is launched.
The onConversionDataSuccess
method gets the deep_link_value
và các biến khác làm giá trị đầu vào như: Map <String, Object>.
Bản đồ chứa hai loại dữ liệu:
- Dữ liệu phân bổ
- Data defined by the marketer in the link (
deep_link_value
and other parameters and values)
Other parameters can be either:- Các thông số chính thức của AppsFlyer.
- Các thông số và giá trị tùy chỉnh do nhà tiếp thị và nhà phát triển chọn.
- Cấu trúc dữ liệu đầu vào được mô tả tại đây.
The marketer and developers need to plan the deep_link_value
(and other possible parameters and values) together based on the desired app behavior when the link is clicked.
To plan the deep_link_value
, and other parameter names and values based on the expected link behavior:
- Cho nhà tiếp thị biết những thông số và giá trị nào cần thiết cho việc triển khai hành vi mong muốn của ứng dụng.
- Decide on naming conventions for the
deep_link_value
and other parameters and values.
Note:- Thông số tùy chỉnh sẽ không xuất hiện trong dữ liệu thô được thu thập trong AppsFlyer.
- Dữ liệu chuyển đổi sẽ không trả về thông số tùy chỉnh có tên "name" với chữ "n" viết thường.
Triển khai logic onConversionDataSuccess()
When the app is opened for the first time, the onConversionDataSuccess
method is triggered in the main activity. The deep_link_value
and other parameters in the method input are used to implement the specific user experience when the app is first launched.
Để triển khai logic:
- Triển khai logic dựa trên các thông số và giá trị đã chọn. Xem ví dụ mã sau đây.
- Sau khi hoàn tất, hãy gửi xác nhận cho nhà tiếp thị rằng ứng dụng hoạt động theo đúng vậy.
Mã mẫu
@Override
public void onConversionDataSuccess(Map<String, Object> conversionData) {
for (String attrName : conversionData.keySet())
Log.d(LOG_TAG, "Conversion attribute: " + attrName + " = " + conversionData.get(attrName));
String status = Objects.requireNonNull(conversionData.get("af_status")).toString();
if(status.equals("Non-organic")){
if( Objects.requireNonNull(conversionData.get("is_first_launch")).toString().equals("true")){
Log.d(LOG_TAG,"Conversion: First Launch");
if (conversionData.containsKey("deep_link_value")){
Log.d(LOG_TAG,"Conversion: This is deferred deep linking.");
// TODO SDK in future versions - match the input types
Map<String,String> newMap = new HashMap<>();
for (Map.Entry<String, Object> entry : conversionData.entrySet()) {
newMap.put(entry.getKey(), String.valueOf(entry.getValue()));
}
onAppOpenAttribution(newMap);
}
} else {
Log.d(LOG_TAG,"Conversion: Not First Launch");
}
} else {
Log.d(LOG_TAG,"Conversion: This is an organic install.");
}
}
⇲ Liên kết Github: Java
Triển khai logic onConversionDataFailure()
The onConversionDataFailure
method is called whenever the call to onConversionDataSuccess
fails. The function should report the error and create an expected experience for the user.
To implement the onConversionDataFailure
:
@Override
public void onConversionDataFail(String errorMessage) {
Log.d(LOG_TAG, "error getting conversion data: " + errorMessage);
}
⇲ Liên kết Github: Java
Tải trọng mẫu Android
Xem các tải trọng mẫu sau cho Liên kết Ứng dụng, lược đồ URI và deferred deep linking. Các mẫu chứa toàn bộ tải trọng, có liên quan khi tất cả các thông số trong trang thiết lập liên kết tùy chỉnh Onelink chứa dữ liệu.
Lưu ý: Tải trọng trả lại dưới dạng bản đồ. Tuy nhiên, để rõ ràng, các tải trọng mẫu theo sau được hiển thị ở dạng JSON.
Android App Links
Giá trị đầu vào cho onAppOpenAttribution(Map<String, String> attributionData)
{
"af_dp": "afbasicapp://mainactivity",
"af_ios_url": "https://isitchristmas.com/",
"fruit_name": "apples",
"c": "fruit_of_the_month",
"media_source": "Email",
"link": "https://onelink-basic-app.onelink.me/H5hv/6d66214a",
"pid": "Email",
"af_cost_currency": "USD",
"af_sub1": "my_sub1",
"af_click_lookback": "20d",
"af_adset": "my_adset",
"af_android_url": "https://isitchristmas.com/",
"af_sub2": "my_sub2",
"fruit_amount": 26,
"af_cost_value": 6,
"campaign": "fruit_of_the_month",
"af_channel": "my_channel",
"af_ad": "my_adname",
"is_retargeting": "true"
}
{
"af_dp": "afbasicapp://mainactivity",
"install_time": "2020-08-06 06:56:02",
"fruit_name": "apples",
"af_ios_url": "https://my_ios_lp.com",
"media_source": "Email",
"scheme": "https",
"link": "https://onelink-basic-app.onelink.me/H5hv?pid=Email&c=fruit_of_the_month&af_channel=my_channel&af_adset=my_adset&af_ad=my_adname&af_sub1=my_sub1&af_sub2=my_sub2&fruit_name=apples&fruit_amount=16&af_cost_currency=USD&af_cost_value=6&af_click_lookback=20d&af_dp=afbasicapp%3A%2F%2Fmainactivity&af_ios_url=https%3A%2F%2Fmy_ios_lp.com&af_android_url=https%3A%2F%2Fmy_android_lp.com",
"af_cost_currency": "USD",
"af_sub1": "my_sub1",
"af_click_lookback": "20d",
"path": "/H5hv",
"af_adset": "my_adset",
"af_android_url": "https://my_android_lp.com",
"af_sub2": "my_sub2",
"fruit_amount": 16,
"af_cost_value": 6,
"host": "onelink-basic-app.onelink.me",
"campaign": "fruit_of_the_month",
"af_channel": "my_channel",
"af_ad": "my_adname"
}
URI schemes
Giá trị đầu vào cho onAppOpenAttribution(Map<String, String> attributionData)
{
"scheme": "afbasicapp",
"link": "afbasicapp://mainactivity?af_ad=my_adname&af_adset=my_adset&af_android_url=https%3A%2F%2Fmy_android_lp.com&af_channel=my_channel&af_click_lookback=25d&af_cost_currency=NZD&af_cost_value=5&af_deeplink=true&af_dp=afbasicapp%3A%2F%2Fmainactivity&af_force_deeplink=true&af_ios_url=https%3A%2F%2Fmy_ios_lp.com&af_sub1=my_sub1&af_sub2=my_sub2&af_web_id=367f81fb-59a4-446a-ac6c-a68d2ee9447c-p&campaign=my_campaign&fruit_amount=15&fruit_name=apples&is_retargeting=true&media_source=Email&shortlink=9270d092",
"af_cost_currency": "NZD",
"af_click_lookback": "25d",
"af_deeplink": true,
"path": "",
"af_android_url": "https://my_android_lp.com",
"af_force_deeplink": true,
"fruit_amount": 15,
"host": "mainactivity",
"af_channel": "my_channel",
"shortlink": "9270d092",
"af_dp": "afbasicapp://mainactivity",
"install_time": "2020-08-06 06:56:02",
"af_ios_url": "https://my_ios_lp.com",
"fruit_name": "apples",
"af_web_id": "367f81fb-59a4-446a-ac6c-a68d2ee9447c-p",
"media_source": "Email",
"af_status": "Non-organic",
"af_sub1": "my_sub1",
"af_adset": "my_adset",
"af_sub2": "my_sub2",
"af_cost_value": 5,
"campaign": "my_campaign",
"af_ad": "my_adname",
"is_retargeting": true
}
{
"af_dp": "afbasicapp://mainactivity",
"install_time": "2020-08-06 06:56:02",
"af_ios_url": "https://my_ios_lp.com",
"fruit_name": "apples",
"af_web_id": "367f81fb-59a4-446a-ac6c-a68d2ee9447c-p",
"scheme": "afbasicapp",
"media_source": "Email",
"link": "afbasicapp://mainactivity?af_ad=my_adname&af_adset=my_adset&af_android_url=https%3A%2F%2Fmy_android_lp.com&af_channel=my_channel&af_click_lookback=25d&af_cost_currency=NZD&af_cost_value=5&af_deeplink=true&af_dp=afbasicapp%3A%2F%2Fmainactivity&af_ios_url=https%3A%2F%2Fmy_ios_lp.com&af_sub1=my_sub1&af_sub2=my_sub2&af_web_id=367f81fb-59a4-446a-ac6c-a68d2ee9447c-p&campaign=my_campaign&fruit_amount=15&fruit_name=apples&is_retargeting=true&media_source=Email",
"af_cost_currency": "NZD",
"af_status": "Non-organic",
"af_click_lookback": "25d",
"af_sub1": "my_sub1",
"af_deeplink": true,
"path": "",
"af_android_url": "https://my_android_lp.com",
"af_adset": "my_adset",
"fruit_amount": 15,
"af_sub2": "my_sub2",
"host": "mainactivity",
"af_cost_value": 5,
"campaign": "my_campaign",
"af_channel": "my_channel",
"af_ad": "my_adname",
"is_retargeting": true
}
Deferred deep linking
Giá trị đầu vào cho onConversionDataSuccess(Map<String, Object> conversionData)
{
"redirect_response_data": null,
"adgroup_id": null,
"engmnt_source": null,
"retargeting_conversion_type": "none",
"orig_cost": 6.0,
"af_cost_currency": "USD",
"is_first_launch": true,
"af_click_lookback": "20d",
"af_cpi": null,
"iscache": true,
"click_time": "2020-08-12 16:04:50.605",
"af_android_url": "https://isitchristmas.com/",
"fruit_amount": 26,
"is_branded_link": null,
"match_type": "probabilistic",
"adset": null,
"af_channel": "my_channel",
"campaign_id": null,
"shortlink": "6d66214a",
"af_dp": "afbasicapp://mainactivity",
"install_time": "2020-08-12 16:05:33.750",
"af_ios_url": "https://isitchristmas.com/",
"fruit_name": "apples",
"media_source": "Email",
"agency": null,
"af_siteid": null,
"af_status": "Non-organic",
"af_sub1": "my_sub1",
"cost_cents_USD": 600,
"af_sub5": null,
"af_adset": "my_adset",
"af_sub4": null,
"af_sub3": null,
"af_sub2": "my_sub2",
"adset_id": null,
"esp_name": null,
"af_cost_value": 6,
"campaign": "fruit_of_the_month",
"http_referrer": "android-app://com.slack/",
"af_ad": "my_adname",
"is_universal_link": null,
"is_retargeting": true,
"adgroup": null
}
Đã cập nhật khoảng 1 năm trước