AppsFlyer SDK 对接 - iOS

ios.pngSDK 版本:4.8.3(发行说明

1. 概述

本指南详细说明了如何将 AppsFlyer SDK 嵌入到您的 iOS 应用中。您可以跟踪安装、会话和其他应用内事件(包括应用内购买、达到的游戏关卡级别等),从而评估 ROI 和了解用户使用应用的频次。AppsFlyer SDK 完全兼容 Apple 的 IPv6 DNS64/NAT64 网络。

 注意

AppsFlyer SDK 完全兼容 Apple 的 IPv6 DNS64/NAT64 网络。如需了解更多信息,请单击此处

 重要信息!

AppsFlyer SDK 使用 NSUserDefaults 类。清除 NSUserDefaults 中的所有数值可能会导致归因出现问题。

2. 快速入门

2.1 下载并将 AppsFlyer SDK 添加到 Xcode

CocoaPods Carthage Static Framework Static Lib
  • 确保您已经下载并安装了最新版本的 CocoaPods
  • 将下面一行代码添加到您的 Podfile 中: pod 'AppsFlyerFramework'
  • 运行 pod install
  • 确保使用 .xcworkspace文件打开 Xcode 中的项目,而不是使用 .xcodeproj文件打开,从此处继续。

AppsFlyer SDK 使用下列本地框架:

AdSupport.framework
必须要有此框架才能从设备中收集 IDFA。 没有 IDFA 就无法追踪 Facebook Ads、Twitter、 Google ads 以及其他平台的广告。
iAd.framework
需要使用此框架在应用中追踪 Apple Search Ads

2.2 在 App Delegate 中配置对接

打开应用的 AppDelegate.m 文件,并导入 AppsFlyer SDK:

Swift Objective-C
导入 AppsFlyerLib

3. SDK 初始化

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

Note that you need to set the app ID here with digits only, without the "id" prefix.

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

 注意

如果设置了 isDebug=true,xCode 控制台会打印出AppsFlyer SDK 的日志

 

  • applicationDidBecomeActive 函数中添加下列代码:
Swift Objective-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. 追踪应用内事件

应用内事件能够为您提供应用内所发生情况的深入分析。建议您花一点时间定义希望监测的事件,以追踪投资回报率 (ROI) 和用户生命周期价值 (LTV)。

追踪应用内事件是通过调用 trackEvent,将事件名称和数值参数传递过去来进行的。请参阅应用内事件,了解更多详细信息。

应用内事件名称长度不超过 45 个字符。超过 45 个字符的事件名称不会出现在 Dash Board 中,只会出现在原始数据、Pull API 和 Push API 中。

示例:达到级别的应用内事件

Swift Objective-C
AppsFlyerTracker.shared().trackEvent(AFEventLevelAchieved,withValues: [ 
        AFEventParamLevel: 9,
        AFEventParamScore : 100
 ]);

This generates an af_level_achieved event type (using the AFEventLevelAchieved constant) with the following event values: {af_level: 9 , af_score: 100} 

 注意

从 iOS SDK 4.8.1 版起,AppsFlyer 支持应用内事件或任何其他 SDK API 使用非英语字符。

Do not to add any currency symbol or decimal points to the figures, as these are not recognized

 Usage Example

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

5. 追踪深度链接

 提示

我们强烈建议您将深度链接对接到您的应用中。

需要 iOS9 和更高版本才支持 Universal Links。了解更多详细信息,请单击此处

要报告此类启动,需要将以下代码添加到 App Delegate 中:

Swift Objective-C
// 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
    }

6. 追踪收入

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

 注意

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.

示例:收入应用内事件

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

7. 获取转化数据

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. 

For more information regarding this advanced functionality, click here.

8. 用户标示符

There are a number of options for retrieving user identifiers:

获取 AppsFlyer Device ID

AppsFlyer's unique device ID is created for every new install of an app. You can obtain it using the following code:

Swift Objective-C
let appsflyerId = AppsFlyerTracker.shared().getAppsFlyerUID()

Set Customer User ID

Setting your own customer ID enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs. This ID is available in AppsFlyer CSV reports along with Postback APIs for cross-referencing with your internal IDs.

To set your Customer User ID:

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

 重要事项

customerUserID 应在 trackAppLaunch 之前设置。建议您尽快设置自己的客户用户 ID,因为此 ID 只与设置后报告的事件关联。客户用户 ID 还可以用于完成与 MixpanelSwrve 等分析平台的集成。 了解客户用户 ID 的更多信息,请点击此处

设置用户电子邮件

如果您在自己的应用中收集一个或多个用户的电子邮件地址,则您可以通过 AppsFlyer 报告这些电子邮件地址。您可以通过 Sha1、MD5 和明文加密等方式对电子邮件的值进行加密。

示例:收集用户电子邮件地址

Swift Objective-C
AppsFlyerTracker.shared().setUserEmails(["email1@domain.com", "email2@domain.com"], with: EmailCryptTypeSHA1)

 注意

Personally Identifiable Information (PII) such as email addresses is not retained by AppsFlyer, nor is this information presented in any reports. The purpose of collecting this information is solely for postback purposes to the media source.

IDFA 和 IDFV

如果 AdSupport.framework 包含在应用中,则 AppsFlyer 会自动收集 IDFA (广告主 ID) 和 IDFV (厂商 ID)。

9. 可选功能

追踪卸载

如要卸载追踪,需在您的应用上启用远程推送通知。请参阅 Apple 的远程通知编程指南,了解更多详细信息。

按照 iOS SDK 对接指南 ,完成卸载功能设置。

追踪推送通知

要启用通过推送通知追踪应用启动,需要在 App Delegate 中添加下列代码:

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

推送消息应包含 AppsFlyer 追踪参数的 af 参数。

消息示例:

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

交叉促销追踪

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.

了解详细信息,请单击此处参阅交叉促销追踪文章。

用户邀请追踪

AppsFlyer 允许您追踪并归因从应用内的用户邀请发起的安装。允许您现有的用户邀请朋友或联系人成为您应用的新用户,这可以成为应用的一个关键增长因素。 
 
了解详细信息,请单击此处参阅用户邀请追踪文章。

设置货币代码 

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。您可以在这里找到可用的 ISO 货币代码。

使用以下 API 设置货币代码:

public void setCurrencyCode(String currencyCode);

使用示例:

Swift Objective-C
AppsFlyerTracker.shared().currencyCode= "USD"

应用内购买验证

 注意

该函数支持 iOS7 和更高版本。

AppsFlyer SDK 可以提供应用内购买的服务器验证。要设置接收验证追踪,您需要在 SKStoreKit 的 completeTransaction:callback 内调用 validateAndTrackInAppPurchase 方法。此调用将自动生成一个 af_purchase 应用内事件。

- (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;

 注意

此价格参数应包含与经过验证的购买事件相关的总收入。

此调用有两个回调块,一个用于“成功”,另一个用于“失败”(出于任何原因,包括验证失败)。在成功的情况下,将返回一个字典,其中包含 Apple 服务器提供的接收验证数据。 

 重要

进行测试时,我们建议将  useReceiptValidationSandbox  标记设置为 YES,因为这一操作会将请求重定向至 Apple 沙盒服务器。

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

 

 示例

Objective-C Swift
[[AppsFlyerTracker sharedTracker] validateAndTrackInAppPurchase:product.productIdentifierprice:product.price.stringValue
currency:@"USD"
transactionId:trans.transactionIdentifier
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);
}];

关于验证接收的可能返回值的列表,请点击此处参阅 Apple 的相关文档。

匿名

AppsFlyer 为您提供在 AppsFlyer 分析中匿名特定用户标示符的方法。该方法符合最新的隐私要求并遵守 Facebook 数据和隐私政策。默认为 NO,表示默认未进行匿名。

在 SDK 初始化过程中,使用该 API 明确匿名用户安装、事件和互动:

Swift Objective-C
AppsFlyerTracker.shared().deviceTrackingDisabled= true

可以通过再次调用 deviceTrackingDisabled,并设置为 false,重新启动追踪。

 警告

对用户匿名会严重影响您的归因信息。 只在法律要求您不得收集用户信息的地区使用此选项。

Custom Time Between Sessions

For AppsFlyer to count two separate sessions, the default time between each session must be at least 5 seconds.  A session commences when the user opens the app.  If you want to configure a different time between sessions, use the following API:

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

Background Sessions for Utility Apps

在 iOS 中不可用。 
 

iOS 应用扩展和 WatchKit

应用扩展需要使用互联网的权限:

  1. 打开应用扩展的 info.plist文件
  2. NSExtension/NSExtensionAttributes 中,将 RequestsOpenAccess 标志设置为 YES。

将下列代码添加到应用扩展的 UIViewController viewDidLoad:

Swift Objective-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()
    }

要在应用扩展上接收归因数据,按照此处的说明进行,并在应用的 UIViewController 而非 AppDelegate 上进行实施。

Opt Out

在某些极端情况下,您可能出于法律和隐私合规方面的考虑,希望关闭所有 SDK 追踪。使用 isStopTracking API 可实现此功能。一旦调用该 API,SDK 将停止运行,不再与服务器通信。

Swift Objective-C
AppsFlyerTracker.shared().isStopTracking= true

收集设备名称

AppsFlyer SDK 允许您收集设备名称以作内部分析之用。此项功能默认是关闭的。使用以下 API 开启此项功能:

Swift Objective-C
AppsFlyerTracker.shared().shouldCollectDeviceName= false`

 重要

在某些地区,设备名称可能也属于个人数据。仅在您了解法律允许并已明确获得用户同意的情况下,才能收集该信息。

Setting Additional Data

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

Ojective-C Swift
>NSDictionary* CustomDataMap = [[NSDictionary alloc] initWithObjectsAndKeys:@"value_of_param_1", @"custom_param_1", nil];
    
[[AppsFlyerTracker sharedTracker] setAdditionalData:CustomDataMap];

10. 测试您的对接

了解如何测试您的对接的详细信息,请单击此处

11. 将应用提交到应用商店

您可以在此处找到将应用提交到应用商店的说明。

显示
这篇文章有帮助吗?
12 人中有 8 人觉得有帮助

评论

0 条评论

登录写评论。