AppsFlyer SDK 对接 - iOS

  • 广告商
  • 开发商

ios.pngSDK Version: 4.8.9(Release notes)

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 初始化

didFinishLaunchingWithOptions 方法中,使用从 iTunes Connect 中获得的应用 ID 和您的 AppsFlyer dev 秘钥初始化 SDK。 

注:您需用纯数字在此设置应用 ID,不含“id”前缀。

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)。

Tracking in-app events is performed by calling trackEvent with event name and value parameters. See In-App Events for more details.

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

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

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

该代码可以生成 af_level_achieved 类型的事件(使用 AFEventLevelAchieved 常量)包含下述事件的值:{af_level: 9 , af_score: 100} 

 注意

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

请勿向数字添加任何货币符号或小数点,以免识别不出

 使用示例

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
    }

 重要信息!

对于Swift 4.2及以上版本,请在 continue userActivity 方法用下面的代码

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

6. 追踪收入

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.

 注意

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直接通过SDK 获取新安装用户的归因信息。这样,您就可以为该用户提供个性化内容或将用户引导至应用内的特定页面,这样可以大大增强用户与应用之间的互动。 

了解该高级功能的更多信息,请点击此处

8. 用户标示符

获取用户标识符有多种方法:

获取 AppsFlyer Device ID

每次安装App都会创建一个 AppsFlyer 独有的 device ID。您可以使用下列代码获得它

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

设置客户用户 ID

设置您自己的customer user ID 可以帮助您将自己定义的 customer user ID 关联到 AppsFlyer 的独有 ID 和其他设备的 ID。该 ID 会出现在 AppsFlyer的CSV 报告和postback 中,用于与您的内部 ID 关联。

设置您的 Customer User ID:

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

 重要事项

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 only for events tracked is visible after calling this method.

Customer User ID can also be used to complete integrations with Analytics platforms such as Mixpanel and Swrve.

Getting Customer User ID:

To avoid setting the customer user ID value again beyond the first launch you can check if its value is empty or not by using: 

[AppsFlyerTracker sharedTracker].customerUserID

了解客户用户 ID 的更多信息,请点击此处

设置用户电子邮件

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

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

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

 注意

AppsFlyer 不会保留电子邮件地址等个人可识别信息(PII),此类信息也不会出现在任何报告中。收集此类信息的目的仅限于向媒体渠道回传

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 允许您追踪并归因从您的某个应用(用户的现有应用)的交叉促销发起的安装。交叉促销应用可以带来更多的新用户安装。

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

用户邀请追踪

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

设置货币代码

除了使用特定货币代码作为送到 AppsFlyer 的应用内事件的一部分外,您还可以使用下面的 API 设置全球货币代码。若 AFEventParamCurrency  不作为应用内事件的一部分发送,则可使用全球货币代码。

默认值为 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,重新启动追踪。

 警告

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

自定义会话间的时间

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:

Swift Objective-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.

面向实用应用的后台会话

在 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

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.

There are several different scenarios for user opt-out. We highly recommend following the exact instructions for the scenario, that is relevant for your app.

 警告

仅在您完全不想追踪该用户时,使用该 API。使用该 API 会严重影响您的报告和归因。

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

 重要

Do not call trackAppLaunch if isStopTracking is set to true

收集设备名称

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

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

 重要

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

Setting Additional Custom Data

setAdditionalData API 需要在 SDK 级别与若干外部合作伙伴平台对接,包括 SegmentAdobe 和 Urban Airship。仅在平台对接文章明确说明需要 setAdditionalData API 时,才使用该 API。
以下为在 iOS 上为 Objective-C 或 Swift 实施 setAdditionalData 的代码示例

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

10. 测试您的对接

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

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

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

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

评论

0 条评论

登录写评论。