Tích hợp AppsFlyer SDK - iOS

  • Nhà quảng cáo
  • Nhà phát triển

ios.pngSDK Version: 4.8.12(Release notes)

1. Tổng quan

Hướng dẫn này làm rõ cách tích hợp SDK của AppsFlyer vào ứng dụng iOS của bạn. Bạn có thể theo dõi lượt cài đặt, cập nhật, các phiên làm việc và các sự kiện trong ứng dụng bổ sung cũng như các ứng dụng cài đặt (bao gồm mua hàng trong ứng dụng, cấp độ trò chơi, v.v.) để đánh giá lợi tức đầu tư ROI và mức độ tham gia của người dùng. IOS SDK tương thích với tất cả thiết bị iOS (iPhone, iPod, iPad) chạy phiên bản iOS 6 trở lên.

 Lưu ý

SDK của AppsFlyer hoàn toàn phù hợp với Mạng IPv6 DNS64/NAT64 của Apple. Để biết thêm thông tin chi tiết, nhấp vào đây.

 Quan trọng!

SDK của AppsFlyer tận dụng lớp NSUserDefaults. Xoá tất cả các giá trị khỏi NSUserDefaults có thể gây ra các vấn đề phân bổ.

 Lời khuyên

  • Chapters 2 and 3 are MANDATORY to implement BASIC SDK integration, i.e. install attribution only
  • Tracking in-app events chapter is HIGHLY RECOMMENDED to implement
  • The rest of the described features are OPTIONAL to implement, although some of them may be necessary for you, depending on your app's business logic. For example, tracking revenue or getting the conversion data on first launch may be vital for your app's flow

2. Bắt đầu nhanh

2.1 Tải về và thêm SDK của AppsFlyer vào Xcode

CocoaPodsCarthageStatic FrameworkStatic Lib
  • Đảm bảo rằng bạn đã tải xuống và cài đặt phiên bản mới nhất của CocoaPods
  • Add the following row to your Podfile:
    pod 'AppsFlyerFramework'
  • chạy pod install
  • Đảm bảo rằng bạn sử dụng tệp .xcworkspace để mở các dự án trong Xcode, thay vì sử dụng tệp .xcodeproj từ nay trở đi.

SDK của AppsFlyer sử dụng các khung gốc dưới đây:

AdSupport.framework
This framework is required to collect the IDFA from devices.
Without IDFA you cannot track Facebook Ads, Twitter, Google ads and other networks.
iAd.framework
Khung này là cần thiết để theo dõi các quảng cáo Tìm kiếm Apple trong ứng dụng của bạn

2.2 Định cấu hình Tích hợp trong App Delegate

Mở tệp tin AppDelegate.m trong ứng dụng của bạn và nhập SDK của AppsFlyer:

SwiftObjective-C
nhập AppsFlyerLib

3. Khởi tạo SDK

Initialize the SDK in the didFinishLaunchingWithOptions method with your app ID taken from iTunes Connect and your AppsFlyer dev key.

Lưu ý rằng bạn cần thiết lập ID ứng dụng tại đây, chỉ bằng chữ số và không có tiền tố "id".

SwiftObjective-C
AppsFlyerTracker.shared().appsFlyerDevKey = "<your-appsflyer-dev-key>";
AppsFlyerTracker.shared().appleAppID = "123456789"
AppsFlyerTracker.shared().delegate = self
#if DEBUG AppsFlyerTracker.shared().isDebug = true
#endif

 Lưu ý

Nếu isDebug=true được thiết lập, nhật ký SDK AppsFlyer sẽ được hiển thị trong giao diện điều khiển xCode

 

  • Thêm mã sau đây tại chức năng applicationDidBecomeActive :
SwiftObjective-C
func applicationDidBecomeActive(application: UIApplication) { 
// Track Installs, updates & sessions(app opens) (You must include this API to enable tracking) 
AppsFlyerTracker.shared().trackAppLaunch() 
// your other code here.... }

4. Theo dõi sự kiện trong ứng dụng

Sự kiện trong ứng dụng cung cấp thông tin chi tiết về những gì đang xảy ra trong ứng dụng của bạn. Bạn nên dành thời gian và xác định các sự kiện bạn muốn đo lường để cho phép bạn theo dõi ROI (Lợi tức đầu tư) và LTV (Giá trị vòng đời).

Việc theo dõi các sự kiện trong ứng dụng được thực hiện bằng cách gọi trackEvent với tên sự kiện và các tham số giá trị. Xem In App Events để biết thêm thông tin chi tiết.

Tên của Sự kiện trong ứng dụng không được dài quá 45 ký tự. Tên sự kiện dài hơn 45 ký tự sẽ không xuất hiện trong bảng điều khiển, mà chỉ xuất hiện trong Dữ liệu thô, Pull và Push API (API Kéo và Đẩy).

Example: Purchase In-App Event

SwiftObjective-C
AppsFlyerTracker.shared().trackEvent(AFEventPurchase,
  withValues: [
     AFEventParamRevenue: "1200",
     AFEventParamContent: "shoes",
     AFEventParamContentId: "123"
]);

This generates an af_purchase event type (using the AFEventPurchase constant) with the following event values: {af_revenue: 200 , af_currency: "USD", af_quantity: 2, af_content_id: "092" af_receipt_id: "9277"}

 Lưu ý

AppsFlyer hỗ trợ các ký tự không phải tiếng Anh với những sự kiện trong ứng dụng, hoặc với bất kỳ SDK API nào khác, bắt đầu từ iOS SDK phiên bản 4.8.1.

Không thêm bất kỳ ký hiệu tiền tệ hoặc dấu thập phân nào vào các con số vì chúng không thể được nhận diện.

 Ví dụ về cách dùng

SwiftObjective C
AppsFlyerTracker.shared().trackEvent(AFEventPurchase,
withValues: [
  AFEventParamRevenue: @1200,
  AFEventParamCurrency : @"JPY"
]); 

5. Theo dõi Liên kết sâu (Deep Linking)

 Lời khuyên

We highly recommend having deep linking integrated in your app. Deep Linking is a crucial part of retargeting campaigns and it is highly recommended to use when running retargeting campaigns.

iOS9 trở lên yêu cầu ứng dụng của bạn hỗ trợ các Universal Link (Liên kết phổ dụng). Để biết thêm thông tin chi tiết, nhấp vào đây.


To handle deep linking, add the following code in your app (in the app delegate class). The methods in this code allow you to get deep linking data. With deep linking data you can redirect users to the relevant app activity and serve them with the relevant content.

SwiftObjective-C

 func onConversionDataReceived(_ installData: [AnyHashable: Any]) {
  //Handle Conversion Data (Deferred Deep Link)
  }
  
  func onConversionDataRequestFailure(_ error: Error?) {
    //    print("\(error)")
  }
  
  func onAppOpenAttribution(_ attributionData: [AnyHashable: Any]) {
    //Handle Deep Link Data
    
  }
  
  func onAppOpenAttributionFailure(_ error: Error?) {
  }
// Reports app open from a Universal Link for iOS 9 or later
  func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    AppsFlyerTracker.shared().continue(userActivity, restorationHandler: restorationHandler)
    return true
  }

  // Reports app open from deep link from apps which do not support Universal Links (Twitter) and for iOS8 and below
  func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    AppsFlyerTracker.shared().handleOpen(url, sourceApplication: sourceApplication, withAnnotation: annotation)
    return true
  }

  // Reports app open from deep link for iOS 10 or later
  func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    AppsFlyerTracker.shared().handleOpen(url, options: options)
    return true
  }
  

 Quan trọng!

For Swift 4.2 and above, use the following code for the continue userActivity method:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
	AppsFlyerTracker.shared().continue(userActivity, restorationHandler: nil)
	return true
}

6. Theo dõi doanh thu

Use the af_revenue (AFEventParamRevenue) event parameter to count revenue as part of an in-app event. You can populate it with any numeric value, positive or negative.

 Lưu ý

AFEventParamRevenue (equivalent to using af_revenue) is the ONLY event parameter that is counted on AppsFlyer as real revenue on the raw data and dashboard. For more details please click here.


Ví dụ: Sự kiện trong ứng dụng Doanh thu

SwiftObjective-C
AppsFlyerTracker.shared().trackEvent(AFEventPurchase, 
withValues: [
	AFEventParamContentId:"1234567",
	AFEventParamContentType : "category_a",
	AFEventParamRevenue: 1.99,
	AFEventParamCurrency:"USD"
]);

 Quan trọng!

Do NOT format the revenue value in any way. It should not contain comma separators, currency sign, or text. A revenue event should be similar to 1234.56, for example.

Tracking Negative Revenue

If you need to track negative revenue for example when a user cancels a purchase or receives a refund, you can send negative revenue.

SwiftObjective-C
AppsFlyerTracker.shared().trackEvent("cancel_purchase", 
withValues: [
	AFEventParamContentId:"1234567",
	AFEventParamContentType : "category_a",
	AFEventParamRevenue: -1.99,
	AFEventParamCurrency:"USD"
]);

 Lưu ý

Notice the following in the code above:

  1. The revenue value is preceded by a minus sign
  2. The event name has a unique value of "cancel_purchase" - to allow you to identify negative revenue events in the dashboard and raw data reports

7. Lấy dữ liệu chuyển đổi

AppsFlyer allows you to access the user attribution data in real-time for every new install, directly from the SDK level. By doing this you can serve users with personalized content or send them to specific activities within the app, which can greatly enhance their engagement with your app.

Để biết thêm chi tiết liên quan tới chức năng nâng cao này, nhấp vào đây.

8. Bộ định danh người dùng

Chúng ta có một số tùy chọn để lấy mã định danh người dùng:

Nhận ID thiết bị AppsFlyer

ID thiết bị riêng của AppsFlyer được tạo cho mỗi lần cài đặt mới của ứng dụng. Bạn có thể nhận bằng cách sử dụng mã sau đây:

SwiftObjective-C
let appsflyerId = AppsFlyerTracker.shared().getAppsFlyerUID()

Thiết lập ID người dùng Customer User ID

Thiết lập customer ID riêng cho phép bạn tham chiếu ID riêng của bạn với ID riêng của AppsFlyer và ID của các thiết bị khác. ID này hiển thị trong các báo cáo CSV của AppsFlyer cùng với các Postback API để tham chiếu với các ID nội bộ của bạn.

Để thiết lập ID người dùng Customer User ID:

SwiftObjective-C
AppsFlyerTracker.shared().customerUserID = "my user id"

 Lưu ý quan trọng

It is recommended to set your Customer User ID as soon as possible as it is only associated to events reported after its setup. If setCustomerUserId is called before calling trackAppLaunch, the Customer User ID is visible in the raw export for installs and for events. If it is set after, only the value for events tracked is visible after calling this method.

Customer User ID cũng có thể được sử dụng để hoàn thành việc tích hợp với các nền tảng Phân tích như Mixpanel và Swrve.

Nhận Customer User ID:

To get the customer user ID retrieve it from the sharedTracker.

[AppsFlyerTracker sharedTracker].customerUserID

 Quan trọng!

Make sure to set the customer user ID each time the app is launched, before calling trackAppLaunch</code.

Để biết thêm thông tin về Customer User ID, nhấp vào đây.

IDFA và IDFV

AppsFlyer tự động thu thập IDFA (ID cho Nhà quảng cáo) và IDFV (ID cho Nhà cung cấp) nếu có AdSupport.framework trong ứng dụng.

9. Tính năng tùy chọn

Measure Uninstalls

For Uninstall measurement, enable remote push notification on your app. See Apple's Remote Notification Programming Guide for more details.

Follow the iOS SDK integration instructions to complete the uninstall measurement feature setup.

Theo dõi Thông báo Đẩy

Để cho phép Tracking App Launches từ thông báo đẩy, thêm mã sau đây vào app delegate của bạn:

SwiftObjective-C
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
	AppsFlyerTracker.shared().handlePushNotification(userInfo)
}

Thông báo đẩy cần có một tham số af với tham số theo dõi AppsFlyer.

Ví dụ tin nhắn:

{
  "aps":{
   "alert":"Push text",
   "sound":"default",
   "category":"REMINDER_CATEGORY"
  },
  "_p":123456,
  "payloadKey":"payloadValue",
  "af":{
   "pid":"swrve_int",
   "is_retargeting":"true",
   "c":"test_campaign"
  }
}

Theo dõi Quảng cáo chéo

AppsFlyer allows you to track and attribute installs originating from a cross promotion of one of your apps from within the current app the user has. Cross promoting apps can be a major growth factor in driving additional installs for your apps.

For details, see the Cross Promotion Tracking article, here.

Theo dõi mời người dùng

AppsFlyer allows you to track and attribute installs originating from user invites within your app. Allowing your existing users to invite their friends and contacts as new users to your app can be a key growth factor for your app.
 
For details, see the User Invite Tracking article, here.

Thiết lập Mã Tiền tệ

You can set a global currency code using the API below, in addition to specific currency codes that can be used as part of each in-app event sent to AppsFlyer. The global currency code is used when AFEventParamCurrency is not sent as part of an in-app event.

USD là giá trị mặc định. Bạn có thể tìm các mã ISO được chấp nhận tại đây.

Sử dụng API sau đây để thiết lập mã tiền tệ:

public void currencyCode(String currencyCode);

Ví dụ cách dùng:

SwiftObjective-C
AppsFlyerTracker.shared().currencyCode = "USD"

Xác nhận mua hàng trong ứng dụng

 Lưu ý

Chức năng này được hỗ trợ cho iOS7 trở lên.

AppsFlyer’s SDK can provide in‐app purchase server verification. To set receipt validation tracking you need to call the validateAndTrackInAppPurchase method inside the SKStoreKit’s completeTransaction: callback. This call automatically generates an af_purchase in‐app event.

- (void) validateAndTrackInAppPurchase:(NSString *) productIdentifier
price:(NSString *) price
currency:(NSString *) currency
transactionId:(NSString *) tranactionId
additionalParameters:(NSDictionary *) params
success:(void (^)(NSDictionary *response)) successBlock
failure:(void (^)(NSError *error, id reponse)) failedBlock;

 Lưu ý

The price parameter should contain the total revenue associated with the validated purchase event.


This call has two callback blocks, one for ‘success’ and one for ‘failure’ (for any reason, including validation fail). On success, a dictionary is returned with the receipt validation data provided by Apple’s servers.

 Quan trọng

For testing purposes, we recommend setting the useReceiptValidationSandbox flag to YES, as this redirects the requests to Apple sandbox servers.

#ifdef DEBUG
[AppsFlyerTracker sharedTracker].useReceiptValidationSandbox = YES;
#endif

 

 Ví dụ

Objective-CSwift
[[AppsFlyerTracker sharedTracker] validateAndTrackInAppPurchase:@"ProductIdentifier" price:@"price"
    currency:@"USD"
    transactionId:@"transactionID"
    additionalParameters:@{@"test": @"val" , @"test1" : @"val 1"}
    success:^(NSDictionary *result){
      NSLog(@"Purchase succeeded And verified!!! response: %@", result[@"receipt"]);
    } failure:^(NSError *error, id response) {
      NSLog(@"response = %@", response);
      if([response isKindOfClass:[NSDictionary class]]) {
        if([response[@"status"] isEqualToString:@"in_app_arr_empty"]){
          // retry with 'SKReceiptRefreshRequest' because
          // Apple has returned an empty response
          // <YOUR CODE HERE>
        }

      } else {
        //handle other errors
        return;
      }
  }];

 Quan trọng!

When AppsFlyer validates a purchase against Apple servers, if the response contains an empty in-app array, AppsFlyer returns {"status":"in_app_arr_empty"} to the error callback.

If you receive this flag, you must restore the purchased product with Apple by sending a receipt refresh request. For more information see Apple's documentation.

After refreshing the receipt, call validateAndTrackInAppPurchase once more.

See the code above to learn how to handle this error.

For a list of possible return values for validating receipts, please refer to Apple's documentation here.

Ẩn danh

AppsFlyer provides you with a method to anonymize specific user identifiers in AppsFlyer analytics. This method complies with the latest privacy requirements and complies with Facebook data and privacy policies. Default is NO, meaning no anonymization is performed by default.

Sử dụng API này trong quá trình Khởi tạo SDK để ẩn danh hoàn toàn các cài đặt, sự kiện và phiên của người dùng:

SwiftObjective-C
AppsFlyerTracker.shared().deviceTrackingDisabled = true

Có thể khởi động lại việc theo dõi bằng cách gọi deviceTrackingDisabled được đặt là false.

 Cảnh báo

Anonymizing users SEVERELY impacts your attribution information.
Use this option ONLY for regions which legally prevent you from collecting your users' information.

Tùy chỉnh thời gian giữa các phiên

By default, at least 5 seconds must lapse between 2 app launches to count as separate 2 sessions (more about counting sessions).
However, you can use the following API to set your custom value for the minimum required time between sessions:

SwiftObjective-C
AppsFlyerTracker.shared().minTimeBetweenSessions = <your_custom_time_in_seconds>

Note that setting a high value to the custom time between launches may badly impact APIs relying on sessions data, such as deep linking.

Phiên chạy nền cho ứng dụng tiện ích

Unavailable in iOS.
 

Tiện ích mở rộng ứng dụng iOS và WatchKit

Phần mở rộng ứng dụng yêu cầu cho phép sử dụng Internet:

  1. Đi tới tệp tin info.plist của phần mở rộng ứng dụng của bạn
  2. Trong NSExtension / NSExtensionAttributes đặt cờ RequestsOpenAccess thành YES.

Thêm mã sau đây vào UIViewController viewDidLoad của phần mở rộng ứng dụng:

SwiftObjective-C
override func viewDidLoad() {  
    super.viewDidLoad()
    AppsFlyerTracker.shared().appsFlyerDevKey = "MY_APPSFLYER_KEY"

    // MY_APP_ID below stands for you app ID on iTunes Connect. Should be 9 or 10 digits.
    AppsFlyerTracker.shared().appleAppID = "MY_APP_ID"
        
    AppsFlyerTracker.sharedTracker().trackAppLaunch()
  }

Để nhận dữ liệu phân bổ trên phần mở rộng ứng dụng, hãy làm theo những hướng dẫn tại đây và thực hiện trên UIViewController của ứng dụng của bạn thay vì ở trong AppDelegate.

Lựa chọn không tham gia

In some extreme cases you might want to shut down all SDK tracking due to legal and privacy compliance. This can be achieved with the isStopTracking API. Once this API is invoked, our SDK no longer communicates with our servers and stops functioning.

Có một số trường hợp khác nhau để người dùng lựa chọn không tham gia. Chúng tôi khuyên bạn nên thực hiện theo những hướng dẫn chính xác cho từng trường hợp liên quan tới ứng dụng của bạn.

 Cảnh báo

Use this API only in cases where you want to fully ignore this user from any and all tracking. Using this API SEVERELY impacts your attribution, data collection and deep linking mechanism.

SwiftObjective-C
AppsFlyerTracker.shared().isStopTracking = true

 Quan trọng

Không gọi trackAppLaunch nếu isStopTracking được đặt là true

Thu thập Tên Thiết bị

AppsFlyer SDK cho phép bạn thu thập Tên Thiết bị để phân tích nội bộ của bạn. Theo mặc định, tính năng này bị tắt. Để bật tính năng này, hãy sử dụng API sau:

SwiftObjective-C
>AppsFlyerTracker.shared().shouldCollectDeviceName = false`

 Quan trọng

Ở một số khu vực nhất định, Tên Thiết bị có thể được coi là Dữ liệu Cá nhân. Chỉ thu thập thông tin này nếu bạn biết bạn được pháp luật cho phép và đã nhận được sự đồng ý rõ ràng của người dùng.

Thiết lập Dữ liệu Tùy chỉnh Bổ sung

The setAdditionalData API is required to integrate on the SDK level with several external partner platforms, including Segment, Adobe and Urban Airship. Use this API only if the integration article of the platform specifically states setAdditionalData API is needed.
The following is a code example for implementing setAdditionalData on iOS for Objective-C or Swift

Objective-CSwift
NSDictionary* CustomDataMap = [[NSDictionary alloc] initWithObjectsAndKeys:@"value_of_param_1", @"custom_param_1", nil];
  
[[AppsFlyerTracker sharedTracker] setAdditionalData:CustomDataMap];

10. Kiểm tra Tích hợp

Để biết chi tiết về cách thử nghiệm tích hợp của bạn, nhấp vào đây.

Now you can start tracking the media sources you work with.

11. Gửi ứng dụng đến App Store

Bạn có thể tìm thấy các hướng dẫn về cách gửi ứng dụng của bạn vào App Store ở đây.

Bài viết này có hữu ích không?
9 trên 14 thấy hữu ích

Bình luận

0 bình luận

Vui lòng đăng nhập để viết bình luận.

Các bài viết trong mục này