Giới thiệu
AppsFlyer cho phép bạn truy cập dữ liệu phân bổ người dùng trong thời gian thực và trực tiếp ở cấp độ SDK. Ứng dụng cho phép bạn tùy chỉnh trang đích mà một người dùng nhìn thấy trong lần đầu tiên mở một ứng dụng sau khi cài đặt mới. Điều này thường được gọi là liên kết sâu “gián tiếp”. Việc này rất phổ biến trên web, tuy nhiên có một thử thách lớn khi làm điều này trong hệ sinh thái ứng dụng di động. Rất may là AppsFlyer hỗ trợ được mọi trường hợp và mọi nền tảng.
Quan trọng!
Để thực hiện liên kết sâu bị trì hoãn, ứng dụng của bạn phải hỗ trợ các lược đồ URI, Liên kết Ứng dụng (Android) hoặc Liên kết chung (iOS). Xem Thiết lập Liên kết sâu để tìm hiểu thêm.
Đưa một người dùng mới của ứng dụng tới một liên kết sâu khi cài đặt cũng giống như dùng Lược đồ URL tùy chỉnh liên kết sâu của ứng dụng (iOS, Android) cho người dùng đã cài đặt ứng dụng của bạn.
Ví dụ
Giả sử một người dùng vừa nhấp vào quảng cáo Google Adwords của HotelTonight cho tìm kiếm "Hotels New York" (Khách sạn New York). Trước tiên, người dùng được đưa tới Google Play/App-Store để tải xuống ứng dụng và ở lần mở ứng dụng đầu tiên, người dùng trực tiếp được đưa tới trang Các khách sạn tại New York. Bằng cách truy cập dữ liệu phân bổ do AppsFlyer cung cấp, ứng dụng sẽ nhận được chiến dịch và từ khóa dùng chính xác để chuyển hướng người dùng/cài đặt đó.
Bên cạnh việc nâng cao trải nghiệm và cải tiến chuyển đổi, chức năng này cho phép thực hiện các chiến dịch dựa trên ngữ cảnh phức tạp như cung cấp cho người dùng một khoản tín dụng/tiền thưởng khi cài đặt và sử dụng ứng dụng. Ví dụ: Thay vì chiến dịch Nhấp để cài đặt, ta triển khai chiến dịch Cài đặt và nhận $50 chiết khấu khi đặt chỗ. Những chiến dịch này không chỉ cải thiện chuyển đổi nhấp để cài đặt, mà còn cải thiện chuyển đổi thành người dùng trả tiền. Những ứng dụng này có thể cải thiện ROI (lợi tức đầu tư) tổng thể gấp 2 - 5 lần!
SDK của AppsFlyer chịu trách nhiệm cho phép truy cập vào dữ liệu phân bổ từ bên trong ứng dụng. Ở lần khởi chạy ứng dụng đầu tiên, việc truy cập dữ liệu phân bổ từ SDK của AppsFlyer có thể mất vài giây. Ở các phiên sau, truy cập là ngay lập tức, vì dữ liệu phân bổ được lưu trữ trên thiết bị.
Lưu ý
- Theo chính sách quyền riêng tư của Facebook, AppsFlyer (hoặc bất kỳ đối tác bên thứ ba nào thuộc lĩnh vực đo lường trên di động) không được cung cấp thuộc tính cấp độ người dùng cho các cài đặt Facebook, trừ khi bạn chấp nhận các Điều khoản Sử dụng Dịch vụ của Facebook. Thông tin chi tiết tại đây.
Nếu bạn chọn không chấp nhận điều khoản Dịch vụ, các lượt cài đặt quảng cáo trên điện thoại di động trên Facebook được phân loại là "Tự nhiên" và bạn không thể nhận dữ liệu cấp người dùng cho lượt cài đặt trên Facebook.
Truy cập dữ liệu phân bổ để thực hiện liên kết sâu bị trì hoãn có thể áp dụng cho lần khởi chạy đầu tiên của người dùng sau khi cài đặt. Để thực hiện liên kết sâu cho người dùng đã cài đặt ứng dụng, xem tại đây. - Dữ liệu chuyển đổi không phải là API dữ liệu lý tưởng để lưu trữ dữ liệu thô của người dùng trong backend của bạn.
Nhấp vào đây để biết thêm thông tin về việc chọn các API dữ liệu tốt nhất cho bạn.
Thực hiện SDK
Lưu ý
Được hỗ trợ bởi AF Android SDK 2.3.1.6 và AF iOS SDK 2.5.3.8 trở lên.
OnInstallConversionDataLoaded
có dữ liệu phân bổ của cài đặt. Bạn có thể sử dụng chức năng này để:
- Liên kết sâu gián tiếp - tùy biến trang đích của ứng dụng cho người dùng đã vào ứng dụng lần đầu.
- Nhận dữ liệu phân bổ cài đặt cho các sự kiện khác nhau trong suốt vòng đời của người dùng trong phạm vi ứng dụng của bạn
Ví dụ
Người dùng tải xuống và khởi chạy ứng dụng lần đầu tiênsau khi nhìn thấy quảng cáo của bạn về đôi giày màu đỏ trên Facebook. Để gửi người dùng trực tiếp đến trang giày đỏ trong ứng dụng của bạn, hãy sử dụng OnInstallConversionDataLoaded
Để truy cập dữ liệu chuyển đổi của AppsFlyer, từ Android SDK hãy thực hiện ConversionDataListener:
public interface AppsFlyerConversionListener {
void onInstallConversionDataLoaded(Map<String,String> conversionData);
void onInstallConversionFailure(String errorMessage);
}
Đại diện bên dưới được sử dụng nếu bạn muốn truy cập dữ liệu chuyển đổi của AppsFlyer từ SDK.
(void) onConversionDataReceived:(NSDictionary*) installData;
onConversionDataReceived
có dữ liệu phân bổ của cài đặt. Bạn có thể sử dụng chức năng này để:
- Liên kết sâu - tùy biến trang đích của ứng dụng cho người dùng đang mở ứng dụng lần đầu tiên.
- Nhận dữ liệu phân bổ cài đặt cho các sự kiện khác nhau trong suốt vòng đời của người dùng trong phạm vi ứng dụng của bạn.
didReceiveConversionData
có dữ liệu phân bổ của cài đặt. Bạn có thể sử dụng chức năng này để:
- Liên kết sâu gián tiếp - tùy biến trang đích của ứng dụng cho người dùng đã vào ứng dụng lần đầu.
- Nhận dữ liệu phân bổ cài đặt cho các sự kiện khác nhau trong suốt vòng đời của người dùng trong phạm vi ứng dụng của bạn
Ví dụ
Người dùng tải xuống và khởi chạy ứng dụng lần đầu tiênsau khi nhìn thấy quảng cáo của bạn về đôi giày màu đỏ trên Facebook. Để gửi người dùng trực tiếp đến trang giày đỏ trong ứng dụng của bạn, hãy sử dụng OnInstallConversionDataLoaded
Để truy cập dữ liệu chuyển đổi của AppsFlyer, từ Android SDK hãy thực hiện ConversionDataListener:
didReceiveConversionData(string conversionData);
Mã nguồn mẫu
Dưới đây là các mã nguồn mẫu khác nhau dành cho Android và iOS.
@Override
public void onCreate(){
super.onCreate();
/** Set Up Conversion Listener to get attribution data **/
AppsFlyerConversionListener conversionListener = new AppsFlyerConversionListener() {
/* Returns the attribution data. Note - the same conversion data is returned every time per install */
@Override
public void onInstallConversionDataLoaded(Map<String, String> conversionData) {
for (String attrName : conversionData.keySet()) {
Log.d("LOG_TAG", "attribute: " + attrName + " = " + conversionData.get(attrName));
}
setInstallData(conversionData);
}
@Override
public void onInstallConversionFailure(String errorMessage) {
Log.d("LOG_TAG", "error getting conversion data: " + errorMessage);
}
/* Called only when a Deep Link is opened */
@Override
public void onAppOpenAttribution(Map<String, String> conversionData) {
for (String attrName : conversionData.keySet()) {
Log.d("LOG_TAG", "attribute: " + attrName + " = " + conversionData.get(attrName));
}
}
@Override
public void onAttributionFailure(String errorMessage) {
Log.d("LOG_TAG", "error onAttributionFailure : " + errorMessage);
}
};
/* This API enables AppsFlyer to detect installations, sessions, and updates. */
AppsFlyerLib.getInstance().init(AF_DEV_KEY , conversionListener , this);
AppsFlyerLib.getInstance().startTracking(this, AF_DEV_KEY);
Lời khuyên
Nếu bạn không cần dữ liệu chuyển đổi, bạn chỉ cần chuyển null
trong phương pháp init
:
AppsFlyerLib.getInstance().init(AF_DEV_KEY, null, this);
#import "AppsFlyerTracker.h"
@interface AppDelegate : UIResponder<UIApplicationDelegate, AppsFlyerTrackerDelegate> {
...
}
- (BOOL)application:(UIApplication ?*)application didFinishLaunchingWithOptions:(NSDictionary*?)launchOptions {
[AppsFlyerTracker sharedTracker].appsFlyerDevKey = @"[MY_DEV_KEY]";
[AppsFlyerTracker sharedTracker].appleAppID = @"123456789";
// Load conversion and deep link data
[AppsFlyerTracker sharedTracker].delegate = self;
return YES;
}
-(void)applicationDidBecomeActive:(UIApplication *)application
{
[[AppsFlyerTracker sharedTracker] trackAppLaunch];
}
-(void)onConversionDataReceived:(NSDictionary*) installData {
id status = [installData objectForKey:@"af_status"];
if([status isEqualToString:@"Non-organic"]) {
id sourceID = [installData objectForKey:@"media_source"];
id campaign = [installData objectForKey:@"campaign"];
NSLog(@"This is a none organic install. Media source: %@ Campaign: %@",sourceID,campaign);
} else if([status isEqualToString:@"Organic"]) {
NSLog(@"This is an organic install.");
}
}
-(void)onConversionDataRequestFailure:(NSError *) error {
NSLog(@"%@",error);
}
class AppDelegate: UIResponder, UIApplicationDelegate, AppsFlyerTrackerDelegate{
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
AppsFlyerTracker.shared().appsFlyerDevKey = "MY_DEV_KEY"
AppsFlyerTracker.shared().appleAppID = "123456789"
AppsFlyerTracker.shared().delegate = self
//AppsFlyerTracker.shared().isDebug = true
//AppsFlyerTracker.shared().appInviteOneLinkID = "ONELINK_ID";
return true
}
func applicationDidBecomeActive(_ application: UIApplication) {
AppsFlyerTracker.shared().trackAppLaunch()
}
func onConversionDataReceived(_ installData: [AnyHashable: Any]) {
guard let first_launch_flag = installData["is_first_launch"] as? Int else {
return
}
guard let status = installData["af_status"] as? String else {
return
}
if(first_launch_flag == 1) {
if(status == "Non-organic") {
if let media_source = installData["media_source"] , let campaign = installData["campaign"]{
print("This is a Non-Organic install. Media source: \(media_source) Campaign: \(campaign)")
}
} else {
print("This is an organic install.")
}
} else {
print("Not First Launch")
}
}
func onConversionDataRequestFailure(_ error: Error!) {
if let err = error{
print(err)
}
}
func onAppOpenAttribution(_ attributionData: [AnyHashable : Any]!) {
if let data = attributionData{
print("\(data)")
}
}
func onAppOpenAttributionFailure(_ error: Error!) {
if let err = error{
print(err)
}
}
Trong AF GameObject bên trong phương thức Start
:
#if UNITY_IOS
/* Mandatory - set your iOS app ID */
AppsFlyer.setAppID("123456789");
/* Call getConversionData() to get the conversion data in iOS*/
AppsFlyer.getConversionData();
AppsFlyer.trackAppLaunch();
#elif UNITY_ANDROID
/* Mandatory - set your Android package name */
AppsFlyer.setAppID ("com.company.app");
/* For getting the conversion data in Android, you need to add the "AppsFlyerTrackerCallbacks" listener.*/
AppsFlyer.init ("AF_DEY_KEY","AppsFlyerTrackerCallbacks");
#endif
Thực hiện logic trong phương thức didReceiveConversionData
trong lớp AppsFlyerTrackerCallbacks
:
public class AppsFlyerTrackerCallbacks : MonoBehaviour {
public Text callbacks;
// Use this for initialization
void Start () {
print ("AppsFlyerTrackerCallbacks on Start");
}
public void didReceiveConversionData(string conversionData) {
print("AppsFlyerTrackerCallbacks:: got conversion data = " + conversionData);
}
public void didReceiveConversionDataWithError(string error) {
print ("AppsFlyerTrackerCallbacks:: got conversion data error = " + error);
}
public void didFinishValidateReceipt(string validateResult) {
print ("AppsFlyerTrackerCallbacks:: got didFinishValidateReceipt = " + validateResult);
}
public void didFinishValidateReceiptWithError (string error) {
print ("AppsFlyerTrackerCallbacks:: got idFinishValidateReceiptWithError error = " + error);
}
public void onAppOpenAttribution(string validateResult) {
print ("AppsFlyerTrackerCallbacks:: got onAppOpenAttribution = " + validateResult);
}
public void onAppOpenAttributionFailure (string error) {
print ("AppsFlyerTrackerCallbacks:: got onAppOpenAttributionFailure error = " + error);
}
public void onInAppBillingSuccess () {
print ("AppsFlyerTrackerCallbacks:: got onInAppBillingSuccess succcess");
}
public void onInAppBillingFailure (string error) {
print ("AppsFlyerTrackerCallbacks:: got onInAppBillingFailure error = " + error);
}
void printCallback(string str) {
callbacks.text += str + "\n";
}
}
{
"af_status": "Non-organic",
"media_source": "tapjoy_int",
"campaign": "July4-Campaign",
"agency": "starcomm",
"af_siteid": null,
"af_sub1": "subtext1",
"af_sub2": null,
"af_sub3": null,
"af_sub4": null,
"af_sub5": null,
"freehand-param": "somevalue",
"click_time": "2014-05-23 20:11:31",
"install_time": "2014-05-23 20:12:16.751"
}
Khởi chạy lần đầu
Dữ liệu chuyển đổi được gửi từ các máy chủ của AppsFlyer theo thời gian thực tới ứng dụng mới được cài đặt sau khi khởi chạy lần đầu. Sau đó SDK lưu dữ liệu này trong bộ nhớ cache của ứng dụng (thuộc tính chung hoặc userDefault).
Với các lần khởi chạy ứng dụng sau này, SDK của AppsFlyer sẽ đọc dữ liệu chuyển đổi lưu trong bộ nhớ cache và không truy vấn máy chủ của AppsFlyer. Do đó, dữ liệu chuyển đổi LUÔN trả về giá trị giống nhau, dù là lần đầu khởi chạy hay không.
Để giúp các nhà phát triển chỉ sử dụng dữ liệu chuyển đổi ở lần khởi chạy đầu tiên, AppsFlyer đã thêm một tham số gọi là is_first_launch
trong phản hồi dữ liệu chuyển đổi. is_first_launch
là đúng (CÓ trong Objective-C) trên lần khởi chạy đầu tiên, và sai (KHÔNG trong Objective-C) sau đó. Tham số này khả dụng cho cả Android (từ SDK phiên bản 4.8.4) và iOS SDK (từ SDK phiên bản 4.8.2).
Nếu bạn muốn thực hiện liên kết sâu gián tiếp chỉ trong lần khởi chạy đầu tiên, hãy thực hiện sau khi kiểm tra rằng is_first_launch
là true.
Lưu ý
Vì dữ liệu chuyển đổi được lưu trong bộ nhớ dùng chung của ứng dụng, người dùng có thể xóa nếu họ xóa dữ liệu của ứng dụng. Điều này khiến cho is_first_launch
lại có giá trị là true. Do đó, những lần khởi chạy sau khi xóa dữ liệu ứng dụng sẽ được xử lý như lần cài đặt đầu tiên.
Khóa khả dụng trong phản hồi phân bổ
Dữ liệu chuyển đổi trả về bao gồm TẤT CẢ các tham số trên liên kết phân bổ ban đầu và một số tham số máy chủ được tạo vào thời điểm nhấp hoặc cài đặt.
Vì dữ liệu chuyển đổi dựa vào liên kết phân bổ nên các nguồn và liên kết phân bổ khác nhau có thể tạo ra các tham số dữ liệu chuyển đổi khác nhau.
Chức năng sau đây được gọi mỗi lần ứng dụng khởi chạy:
onInstallConversionDataLoaded
danh cho Android
onConversionDataReceived
cho iOS
Có 3 kết quả có thể xảy ra tùy theo loại cài đặt:
- Các lượt Cài đặt không tự nhiên
- Trả về dữ liệu phân bổ ban đầu của cài đặt (xem các ví dụ bên dưới).
- Cài đặt Tự nhiên
- (hoặc cài đặt lại) Trả về "cài đặt tự nhiên"
- Ghi công lại
- Trả về chi tiết chuyển đổi phân bổ lại.
Giải thích tên khóa
Tên khóa | Giải thích | Giá trị ví dụ | Nguồn phương tiện |
---|---|---|---|
af_status |
Hiển thị loại phân bổ đã được phát hiện. Giá trị hợp lệ:
|
Không tự nhiên |
Tất cả |
af_message |
Văn bản tự do |
Cài đặt tự nhiên/Thông báo lỗi |
Tất cả |
media_source |
Tên nguồn truyền thông. Đây là tham số ‘pid’ liên kết phân bổ của AF |
Lưu ýCác nguồn cài đặt xuất phát từ Agency bị ẩn và có giá trị "null". |
Tất cả
|
campaign |
Tên chiến dịch (tham số ‘c’ liên kết phân bổ của AppsFlyer hoặc tên chiến dịch của Facebook) |
Ad1/camp123 |
Tất cả |
clickid |
Click id hoặc transaction id |
123456/xsfd234 |
Tất cả |
af_siteid |
Site id (để tối ưu hóa) |
Site1 |
Tất cả |
af_sub1 |
Tham số bổ sung |
someParameter |
Tất cả |
af_sub2 |
Tham số bổ sung |
|
Tất cả |
af_sub3 |
Tham số bổ sung |
|
Tất cả |
af_sub4 |
Tham số bổ sung |
|
Tất cả |
af_sub5 |
Tham số bổ sung |
|
Tất cả |
af_keywords |
Từ khóa đã tìm trong chiến dịch tìm kiếm. VD: Các chiến dịch tìm kiếm Google Search Campaigns |
Tất cả |
|
click_time |
Ngày & giờ nhấp (mili giây) |
2014-01-08 00:07:53.233 |
Tất cả |
install_time |
Ngày & giờ chuyển đổi (mili giây) |
2014-01-08 00:12:51.701 |
Tất cả |
agency |
Agency hoặc PMD tạo lượt cài đặt |
nanigans |
Tất cả |
is_first_launch |
True khi khởi chạy lần đầu và false ở các lần tiếp theo |
true |
Tất cả |
is_fb
|
Cờ cho biết đó là phân bổ Facebook. Giá trị: true/false |
true |
|
ad_id |
Số định danh duy nhất của Facebook cho một quảng cáo |
6012740800279 |
|
campaign_id |
ID chiến dịch của Facebook |
6012700005123 |
|
adset |
Tên tập quảng cáo của Facebook |
US - 18+ |
|
adset_id |
ID tập quảng cáo của Facebook |
6099800005123 |
|
orig_cost |
Giá trị chi phí của lượt cài đặt (có thể ở bất kỳ loại tiền tệ nào) |
1.5 |
Tất cả |
cost_cents_USD |
Giá trị chi phí tính bằng cent Mỹ sau khi chuyển đổi tiền tệ |
150 (Cent) |
Tất cả |
Lưu ý
Đối với tích hợp Liên kết Phân bổ (các mạng không tự báo cáo), tất cả các tham số URL xuất hiện trong liên kết phân bổ được trả về trong GCD.
Ví dụ cài đặt Liên kết phân bổ thông thường của AppsFlyer
Lượt cài đặt được tạo ra bằng cách sử dụng liên kết phân bổ sau:
http://app.appsflyer.com/com.greatapp?pid=network_int&c=network_TH&af_ad=ad_name&af_sub1=102619
&af_sub2=network_TH_G001_Android&af_dp=app%3A%2F%2Fhome&af_prt=expertagency
&af_siteid=1777215&af_sub_siteid=1702&freehand-param=somevalue&tag={TAGID}
&clickid={CLICKID}&af_click_lookback=1d
http://app.appsflyer.com/id123456789?pid=network_int&c=network_KR&af_ad=ad_name&af_sub1=CD48704_
&af_sub2=network_KR_G001_iOS&af_dp=app%3A%2F%2Fhome&af_prt=expertagency&
af_siteid=1777236&af_sub_siteid=1702&freehand-param=somevalue&tag={TAGID}
&clickid={CLICKID}&af_click_lookback=1d
tạo ra các mục sau
Phản hồi Dữ liệu Chuyển đổi
{
"media_source":"network_int",
"campaign":"network_TH",
"adset":null,
"clickid":"fb7f51d42-2621-93bd-e9a1b24f1acfab7b76e5104706104f4d6*******",
"adgroup":null,
"campaign_id":null,
"af_cost_currency":"USD",
"af_status":"Non-organic",
"af_sub_siteid":"1702",
"agency":"expertagency",
"af_sub3":null,
"af_cost_model":"CPI",
"af_siteid":"1777215",
"af_ad" = "ad_name",
"af_dp":"app://home",
"adset_id":null,
"click_time":"2017-07-19 08:30:31.890",
"cost_cents_USD":"150",
"iscache":true,
"is_first_launch":true,
"af_cpi":null,
"af_sub1":"102619",
"af_cost_value":"1.5",
"af_click_lookback":"1d",
"af_sub4":null,
"site_id":"1777215",
"adgroup_id":null,
"tag":"8d55089f-31b6-407b-9266-*********",
"orig_cost":"1.5",
"af_prt":"expertagency",
"af_sub5":null,
"install_time":"2017-07-19 08:30:35.461",
"af_sub2":"network_TH_G001_Android",
"freehand-param":"somevalue"
}
{
"media_source":"network_int",
"campaign":"network_KR",
"adset":null,
"adgroup":null,
"campaign_id":null,
"af_cost_currency":"USD",
"af_status":"Non-organic",
"agency":"expertagency",
"af_sub3":null,
"af_cost_model":"CPI",
"af_siteid":"1777236",
"af_ad" = "ad_name",
"af_dp":"app://home",
"adset_id":null,
"click_time":"2017-07-18 14:48:42.896",
"cost_cents_USD":"0",
"iscache":true,
"is_first_launch":1,
"af_cpi":null,
"af_sub1":"CD48704_",
"af_click_lookback":"1d",
"af_sub4":null,
"site_id":"1777236",
"adgroup_id":null,
"tag":"43fafd60-76ad-4a8f-9d1d-************",
"orig_cost":"0.0",
"af_prt":"expertagency",
"af_sub5":null,
"install_time":"2017-07-18 15:09:06.014",
"af_sub2":"network_KR_G001_iOS",
"clickID":"3gggBgAw2Bvxa8gR56ZA8Y3qjUy2gPkFgP6rA96s4e*******",
"freehand-param":"somevalue"
}
Lưu ý
Thứ tự của các khóa có thể thay đổi. Khóa bổ sung có thể được thêm vào mà không cần thông báo.
Ví dụ Cài đặt Facebook
Lưu ý
Không có liên kết phân bổ cho các chiến dịch Facebook.
Tham số Liên kết sâu được định nghĩa trong chiến dịch Facebook không khả dụng bên ngoài Facebook. Điều này bao gồm tham số af_dp, chứa đường dẫn lược đồ trong ứng dụng. Do đó, để triển khai liên kết sâu bị trì hoãn, phải áp dụng logic bổ sung cho các chiến dịch của Facebook. Sử dụng dữ liệu Facebook trong phản hồi getConversionData
, ví dụ như: chiến dịch, adset, adgroup, v.v. để chuyển hướng theo dạng lập trình cho người dùng của bạn.
Phản hồi Dữ liệu Chuyển đổi
{
"adset":"T:DAT-Desktop_O:All_L:AR-AE_A:All_R:1-30 Day",
"adgroup":"T:DAT-Desktop_O:All_L:AR-AE_A:All_R:1-30 Day",
"campaign_id":"6068535534218",
"af_status":"Non-organic",
"agency":null,
"af_sub3":null,
"af_siteid":null,
"adset_id":"6073532011618",
"is_fb":true,
"is_first_launch":true,
"click_time":"2017-07-18 12:55:05",
"iscache":false,
"ad_id":"6074245540018",
"af_sub1":null,
"campaign":"T:DAT_L:AR-AE",
"is_paid":true,
"af_sub4":null,
"adgroup_id":"6073532011418",
"is_mobile_data_terms_signed":true,
"af_channel":"Facebook",
"af_sub5":null,
"media_source":"Facebook Ads",
"install_time":"2017-07-19 08:06:56.189",
"af_sub2":null
}
{
"media_source":"Facebook Ads",
"campaign":"T:App Install_A:ALL",
"adset":"T:App Install_M:iOS_O:ALL_L:DE-DE_A:ALL",
"adgroup":"T:App Install_M:iOS_O:ALL_L:DE-DE_A:ALL_Banne",
"campaign_id":"6074766693717",
"af_status":"Non-organic",
"agency":null,
"af_sub3":null,
"af_siteid":null,
"adset_id":"6074767207317",
"is_fb":true,
"is_first_launch":true,
"click_time":"2017-07-17 16:23:18",
"iscache":false,
"ad_id":"6078076656717",
"af_sub1":null,
"is_paid":true,
"af_sub4":null,
"adgroup_id":"6074821181517",
"is_mobile_data_terms_signed":true,
"af_channel":"Facebook",
"af_sub5":null,
"install_time":"2017-07-18 15:10:50.190",
"af_sub2":null
}
Liên kết sâu gián tiếp với SRN
AppsFlyer luôn nhận dữ liệu chuyển đổi và đảm bảo dữ liệu khả dụng cho ứng dụng khi khởi chạy lần đầu.
Người dùng mới cài đặt sau khi nhấp vào chiến dịch liên kết sâu/nhắm mục tiêu lại trên SRN có thể được chuyển hướng bên trong ứng dụng khi khởi chạy, bằng cách sử dụng dữ liệu chuyển đổi.
Tuy nhiên, với SRNs, các tham số liên kết sâu AppsFlyer thông thường như af_dp, không được hiển thị như một phần của dữ liệu liên kết sâu.
Để sử dụng dữ liệu này trong ứng dụng, nhà phát triển cần triển khai các logic cao hơn dựa trên các tham số hiện có, ví dụ như chiến dịch, tập quảng cáo hoặc tên quảng cáo đơn.
Ví dụ
Jill, nhà tiếp thị di động của greatapp, quyết định chạy một chiến dịch liên kết sâu trên Facebook, nhắm mục tiêu đến đối tượng đại chúng.
Chiến dịch chuyển hướng bất kỳ người dùng nào nhấp vào đến hoạt động "phần thưởng".
Jack, nhà phát triển ứng dụng di động, bổ sung logic này sau khi nhận được dữ liệu chuyển đổi:
1. Nó có xuất phát từ Facebook ("is_fb=true") không?
2. Nếu có - hãy lấy giá trị của thông số nhóm quảng cáo.
3. Nếu giá trị có chứa từ "phần thưởng", hãy đưa người dùng đến hoạt động "phần thưởng".
Dùng phương thức của Facebook, người dùng hiện có nhấp vào quảng cáo được chuyển hướng trực tiếp đến hoạt động trong khi người dùng mới có trải nghiệm tương tư bằng cách dùng dữ liệu chuyển đổi của AppsFlyer.