API Cũ của iOS
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.
-
iOS đọc các Quyền Tên miền Liên kết của ứng dụng.
-
iOS sẽ mở ứng dụng.
-
SDK AppsFlyer đượ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: AnyHashable: Any
.
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ụ:
func onAppOpenAttribution(_ attributionData: [AnyHashable: Any]) {
//Handle Deep Link Data
print("onAppOpenAttribution data:")
for (key, value) in attributionData {
print(key, ":",value)
}
walkToSceneWithParams(params: attributionData)
}
// User logic
fileprivate func walkToSceneWithParams(params: [AnyHashable:Any]) {
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
UIApplication.shared.windows.first?.rootViewController?.dismiss(animated: true, completion: nil)
var fruitNameStr = ""
if let thisFruitName = params["deep_link_value"] as? String {
fruitNameStr = thisFruitName
} else if let linkParam = params["link"] as? String {
guard let url = URLComponents(string: linkParam) else {
print("Could not extract query params from link")
return
}
if let thisFruitName = url.queryItems?.first(where: { $0.name == "deep_link_value" })?.value {
fruitNameStr = thisFruitName
}
}
let destVC = fruitNameStr + "_vc"
if let newVC = storyBoard.instantiateVC(withIdentifier: destVC) {
print("AppsFlyer routing to section: \(destVC)")
newVC.attributionData = params
UIApplication.shared.windows.first?.rootViewController?.present(newVC, animated: true, completion: nil)
} else {
print("AppsFlyer: could not find section: \(destVC)")
}
}
⇲ Liên kết Github: Swift
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.
func onAppOpenAttributionFailure(_ error: Error) {
print("\(error)")
}
⇲ Liên kết Github: Swift
Liên kết sâu gián tiếp
Quan trọng
Liên kết sâu bị trì hoãn sử dụng phương thức cũ của onConversionDataSuccess có thể không hoạt động đối với iOS 14.5 trở lên, vì liên kết yêu cầu dữ liệu phân bổ có thể không có sẵn do bảo vệ quyền riêng tư.
Chúng tôi khuyến nghị nên sử dụng liên kết sâu hợp nhất (UDL). UDL tuân theo các tiêu chuẩn về quyền riêng tư iOS 14.5 trở lên và chỉ trả về các thông số liên quan đến liên kết sâu và liên kết sâu bị trì hoãn:deep_link_value
anddeep_link_sub1-10
. Thông số phân bổ (chẳng hạn nhưmedia_source
,campaign
,af_sub1-5
, v.v.), trả vềnull
và không thể được sử dụng cho mục đích liên kết sâu.
Tìm hiểu thêm
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ư sau: AnyHashable: Any
.
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
// Handle Organic/Non-organic installation
func onConversionDataSuccess(_ data: [AnyHashable: Any]) {
print("onConversionDataSuccess data:")
for (key, value) in data {
print(key, ":", value)
}
if let status = data["af_status"] as? String {
if (status == "Non-organic") {
if let sourceID = data["media_source"],
let campaign = data["campaign"] {
print("This is a Non-Organic install. Media source: \(sourceID) Campaign: \(campaign)")
}
} else {
print("This is an organic install.")
}
if let is_first_launch = data["is_first_launch"] as? Bool,
is_first_launch {
print("First Launch")
if let fruit_name = data["deep_link_value"]
{
// The key 'deep_link_value' exists only in OneLink originated installs
print("deferred deep-linking to \(fruit_name)")
walkToSceneWithParams(params: data)
}
else {
print("Install from a non-owned media")
}
} else {
print("Not First Launch")
}
}
}
⇲ Liên kết Github: Swift
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
:
func onConversionDataFail(_ error: Error) {
print("\(error)")
}
⇲ Liên kết Github: Swift
Tải trọng mẫu iOS
Xem các tải trọng mẫu sau cho Liên kết Chung, 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.
Universal Links
Giá trị đầu vào cho onAppOpenAttribution(_ attributionData: [AnyHashable: Any])
{
"af_ad": "my_adname",
"af_adset": "my_adset",
"af_android_url": "https://isitchristmas.com/",
"af_channel": "my_channel",
"af_click_lookback": "20d",
"af_cost_currency": "USD",
"af_cost_value": 6,
"af_dp": "afbasicapp://mainactivity",
"af_ios_url": "https://isitchristmas.com/",
"af_sub1": "my_sub1",
"af_sub2": "my_sub2",
"c": "fruit_of_the_month",
"campaign": "fruit_of_the_month",
"fruit_amount": 26,
"fruit_name": "apples",
"is_retargeting": true,
"link": "https://onelink-basic-app.onelink.me/H5hv/6d66214a",
"media_source": "Email",
"pid": "Email"
}
{
"path": "/H5hv",
"af_android_url": "https://my_android_lp.com",
"af_channel": "my_channel",
"host": "onelink-basic-app.onelink.me",
"af_adset": "my_adset",
"pid": "Email",
"scheme": "https",
"af_dp": "afbasicapp://mainactivity",
"af_sub1": "my_sub1",
"fruit_name": "apples",
"af_ad": "my_adname",
"af_click_lookback": "20d",
"fruit_amount": 16,
"af_sub2": "my_sub2",
"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",
"c": "fruit_of_the_month",
"af_ios_url": "https://my_ios_lp.com",
"af_cost_value": 6
}
URI scheme
Giá trị đầu vào cho onAppOpenAttribution(_ attributionData: [AnyHashable: Any])
{
"af_click_lookback ": "25d",
"af_sub1 ": "my_sub1",
"shortlink ": "9270d092",
"af_deeplink ": true,
"media_source ": "Email",
"campaign ": "my_campaign",
"af_cost_currency ": "NZD",
"host ": "mainactivity",
"af_ios_url ": "https://my_ios_lp.com",
"scheme ": "afbasicapp",
"path ": "",
"af_cost_value ": 5,
"af_adset ": "my_adset",
"af_ad ": "my_adname",
"af_android_url ": "https://my_android_lp.com",
"af_sub2 ": "my_sub2",
"af_force_deeplink ": true,
"fruit_amount ": 15,
"af_dp ": "afbasicapp://mainactivity",
"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=56441f02-377b-47c6-9648-7a7f88268130-o&campaign=my_campaign&fruit_amount=15&fruit_name=apples&is_retargeting=true&media_source=Email&shortlink=9270d092",
"af_channel ": "my_channel",
"is_retargeting ": true,
"af_web_id ": "56441f02-377b-47c6-9648-7a7f88268130-o",
"fruit_name ": "apples"
}
{
"af_ad ": "my_adname",
"fruit_name ": "apples",
"host ": "mainactivity",
"af_channel ": "my_channel",
"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=56441f02-377b-47c6-9648-7a7f88268130-o&campaign=my_campaign&fruit_amount=15&fruit_name=apples&is_retargeting=true&media_source=Email",
"af_deeplink ": true,
"campaign ": "my_campaign",
"af_sub1 ": "my_sub1",
"af_click_lookback ": "25d",
"af_web_id ": "56441f02-377b-47c6-9648-7a7f88268130-o",
"path ": "",
"af_sub2 ": "my_sub2",
"af_ios_url ": "https://my_ios_lp.com",
"af_cost_value ": 5,
"fruit_amount ": 15,
"is_retargeting ": true,
"scheme ": "afbasicapp",
"af_force_deeplink ": true,
"af_adset ": "my_adset",
"media_source ": "Email",
"af_cost_currency ": "NZD",
"af_dp ": "afbasicapp://mainactivity",
"af_android_url ": "https://my_android_lp.com"
}
Deferred deep linking
Giá trị đầu vào cho onConversionDataSuccess(_ data: [AnyHashable: Any])
{
"adgroup": null,
"adgroup_id": null,
"adset": null,
"adset_id": null,
"af_ad": "my_adname",
"af_adset": "my_adset",
"af_android_url": "https://isitchristmas.com/",
"af_channel": "my_channel",
"af_click_lookback": "20d",
"af_cost_currency": "USD",
"af_cost_value": 6,
"af_cpi": null,
"af_dp": "afbasicapp://mainactivity",
"af_ios_url": "https://isitchristmas.com/",
"af_siteid": null,
"af_status": "Non-organic",
"af_sub1": "my_sub1",
"af_sub2": "my_sub2",
"af_sub3": null,
"af_sub4": null,
"af_sub5": null,
"agency": null,
"campaign": "fruit_of_the_month ",
"campaign_id": null,
"click_time": "2020-08-12 15:08:00.770",
"cost_cents_USD": 600,
"engmnt_source": null,
"esp_name": null,
"fruit_amount": 26,
"fruit_name": "apples",
"http_referrer": null,
"install_time": "2020-08-12 15:08:33.335",
"is_branded_link": null,
"is_first_launch": 1,
"is_retargeting": true,
"is_universal_link": null,
"iscache": 1,
"match_type": "probabilistic",
"media_source": "Email",
"orig_cost": "6.0",
"redirect_response_data": null,
"retargeting_conversion_type": "none",
"shortlink": "6d66214a"
}
Đã cập nhật 4 tháng trước