iOS 埋点SDK

埋点 SDK 的目标用户是使用第三方插件开发的 APP, 比如使用 Weex、APICloud 等。在这些平台中,我们无法自动采集用户的点击事件和页面浏览事件等,需要依赖调用自定义事件和变量 API来进行数据采集。 如果您的 APP 使用 iOS 原生开发,并且希望自动采集用户的点击事件、页面浏览事件等无埋点事件, 请集成 iOS 无埋点SDK 。

埋点 SDK集成

1. 选择集成方式

注意: 请保证Growing,GrowingCoreKit版本号一致

(1)使用 CocoaPods 快速集成

  • 添加pod 'GrowingCoreKit'到 Podfile 中

  • 执行pod update,不要用--no-repo-update选项

  • (optional) GrowingIO推荐您添加AdSupport.framework依赖库,用于来源管理激活匹配,有利于您更好的分析数据 ,添加项目依赖库的位置在项目设置target -> 选项卡General -> Linked Frameworks and Libraries

  • 直接进行第 2 步 “设置 URL Scheme

(2)手动集成 SDK

  • 下载 iOS SDK以下包:GrowingHeaderGrowingCoreKit

  • 解压 iOS SDK 压缩文件

  • 将Growing.h,GrowingCoreKit.framework添加到iOS工程中。

添加依赖, 在项目中添加以下库文件

库名称

类型

Foundation.framework

基础依赖库

Security.framework

用于SSL连接

CoreTelephony.framework

用于读取运营商名称

SystemConfiguration.framework

用于判断网络状态

AdSupport.framework

用于来源管理激活匹配

libicucore.tbd

用于WebSocket

libsqlite3.tbd

存储日志

CoreLocation.framework

用于读取地理位置信息(如果您的app有权限)

JavaScriptCore.framework

Web圈app交互

WebKit.framework

Web圈选

添加编译参数,注意大小写:

2. 设置URL Scheme

(1) 获取URL Scheme

• 添加新产品:登录官网-> 点击项目选择框-> 点击“项目管理” -> 点击“应用管理” -> 点击“新建应用”->选择添加iOS 应用-> 填写“应用名称“,点击下一步->在第二段中标黄字体。

• 现有产品:登录官网-> 点击项目选择框-> 点击“项目管理” -> 点击“应用管理” -> 找到对应产品的URL Scheme设置URL Scheme

(1) 获取URL Scheme

• 添加新产品:登录官网-> 点击项目选择框-> 点击“项目管理” -> 点击“应用管理” -> 点击“新建应用”->选择添加iOS 应用-> 填写“应用名称“,点击下一步->在第二段中标黄字体。

• 现有产品:登录官网-> 点击项目选择框-> 点击“项目管理” -> 点击“应用管理” -> 找到对应产品的URL Scheme

(2) 添加URL Scheme(growing.xxxxxxxxxxxxxxxx)到项目中

(3) 在AppDelegate 中添加代码

- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation
{
    if([Growing handleUrl:url]){
        return YES;
    }
    ...
    return NO;
}

若您在 AppDelegate 中实现了以下一个或多个方法,请在已实现的函数中,调用[Growing handleUrl:]

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options

若以上所有方法均未实现,请实现以下方法并调用[Growing handleUrl:]

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation

实际情况可能很复杂,请在调试时确保函数[Growing handleUrl:]会被执行到

3.添加初始化函数

在AppDelegate 中引入#import "Growing.h"并添加启动方法

#import "Growing.h"
- (BOOL)application:(UIApplication*)application
    didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
      ...
      //启动GrowingIO
     [Growing startWithAccountId:@"xxxxxxxxxxxxxxxx"]; //替换为您的ID
     // 其他配置
     // 开启Growing调试日志可以开启日志
     // [Growing setEnableLog:YES];
  }

请确保将代码添加在上面描述的位置,添加到其他函数中或者异步block 中可能导致数据不准确!

4.App Store 提交应用注意事项

如果您添加了库AdSupport.framework, GrowingIO则会启用 IDFA,所以在向 App Store 提交应用时,需要:

  • 对于问题 Does this app use the Advertising Identifier (IDFA),选择 YES

  • 对于选项Attribute this app installation to a previously served advertisement,打勾。

  • 对于选项Attribute an action taken within this app to a previously served advertisement,打勾。

为什么 GrowingIO 使用 IDFA? GrowingIO 使用 IDFA 来做来源管理激活设备的精确匹配,让你更好的衡量广告效果。如果您不希望启用IDFA,可以选择不引入 AdSupport.framework

至此,您的SDK安装就成功了。

自定义事件和变量 API

您的APP或网页在集成了 GrowingIO 的 SDK 之后,它将会自动地为您采集一系列用户行为数据,并在 GrowingIO 分析后台供您制成数据分析报表。除上述的用户行为数据(或称为无埋点数据)之外,GrowingIO 还提供了多种 API 接口,供您上传一些自定义事件变量,下面介绍自定义事件和变量 API 使用方法。

SDK 提供多种不同类型的API,请根据您的实际需要正确地调用。

// 发送自定义事件 API
+ (void)track:(NSString *)eventId;
+ (void)track:(NSString *)eventId withNumber:(NSNumber *)number;
+ (void)track:(NSString *)eventId withNumber:(NSNumber *)number andVariable:(NSDictionary<NSString *, NSObject *> *)variable;
+ (void)track:(NSString *)eventId withVariable:(NSDictionary<NSString *, NSObject *> *)variable;

// 发送转化变量 API
+ (void)setEvarWithKey:(NSString *)key andStringValue:(NSString *)stringValue;
+ (void)setEvarWithKey:(NSString *)key andNumberValue:(NSNumber *)numberValue;
+ (void)setEvar:(NSDictionary<NSString *, NSObject *> *)variable;

// 发送用户变量 API
+ (void)setPeopleVariableWithKey:(NSString *)key andStringValue:(NSString *)stringValue;
+ (void)setPeopleVariableWithKey:(NSString *)key andNumberValue:(NSNumber *)numberValue;
+ (void)setPeopleVariable:(NSDictionary<NSString *, NSObject *> *)variable;

// 访问用户变量 API
+ (void)setVisitor:(NSDictionary<NSString *, NSObject *> *)variable;

// 设置登录用户ID API
+ (void)setUserId:(NSString *)userId;

// 清除登录用户ID API
+ (void)clearUserId;

track

发送一个自定义事件。在添加所需要发送的事件代码之前,需要在打点管理用户界面声明事件以及事件级变量。

参数说明:

参数名称

参数类型

是否必须

说明

eventId

String

事件标识符

number

Number

事件的数值,没有number参数时,事件默认加1;当出现number参数时,事件自增number的数值。

eventLevelVariable

JSON Object

事件发生时所伴随的维度信息。

参数限制条件:

参数名称

限制条件

eventId

英文数字组合的字符串,不能为 nil 或者"",长度小于等于50,且不能含有特殊字符

number

正整数或浮点数

eventLevelVariable

不能为nil;eventLevelVariable 内部不允许含有JSONObject或者JSONArray;

key 长度限制小于等于50,value 长度限制小等于1000,值不能为空串,也就是""。

// track API原型
+ (void)track:(NSString *)eventId;
+ (void)track:(NSString *)eventId withNumber:(NSNumber *)number;
+ (void)track:(NSString *)eventId withNumber:(NSNumber *)number andVariable:(NSDictionary<NSString *, NSObject *> *)variable;
+ (void)track:(NSString *)eventId withVariable:(NSDictionary<NSString *, NSObject *> *)variable;
// track API调用示例一
[Growing track:@"registerSuccess"];
// track API调用示例二
[Growing track:@"registerSuccess" withVariable:@{@"gender":@"male", @"age":@"21"}];
// track API调用示例三
[Growing track:@"loanAmount" withNumber:@800000 andVariable:@{@"loanType":@"houseMortgage", @"province":@"Zhejiang"}];

setEvar

发送一个转化信息用于高级归因分析,在添加代码之前必须在打点管理界面上声明转化变量。

参数说明:

参数名称

参数类型

是否必须

说明

key

String

转化变量的标识符

Value

String

转化变量的值

conversionVariables

JSON Object

转化变量用于高级归因分析

参数限制条件:

参数名称

限制条件

key

不能为 nil 或者"",长度小于等于50

Value

变量不为nil或者"",若为字符串则长度应小于等于 1000

conversionLevelVariable

不能为nil; conversionLevelVariable 内部不允许含有JSONObject或者JSONArray;

key 长度限制小于等于50,value 长度限制小等于1000,值不能为空串,也就是""。

// setEvar API原型
+ (void)setEvarWithKey:(NSString *)key andStringValue:(NSString *)stringValue;
+ (void)setEvarWithKey:(NSString *)key andNumberValue:(NSNumber *)numberValue;
+ (void)setEvar:(NSDictionary<NSString *, NSObject *> *)variable;
// setEvar API调用示例一
[Growing setEvarWithKey:@"campaignId" andStringValue:@"1234567890"];
// setEvar API调用示例二
[Growing setEvar:@{@"campaignId":@"12345", @"campaignOwner":@"Li Si"}];

setPeopleVariable

发送用户信息用于用户信息相关分析,在添加代码之前必须在打点管理界面上声明用户变量。

参数说明:

参数名称

参数类型

是否必须

说明

key

String

用户变量的标识符

value

String

用户变量的值

customerVariables

JSON Object

用户变量用于用户信息相关的分析

参数限制条件:

参数名称

限制条件

key

不能为nil或"",长度小于等于50

value

变量不为nil或者"",若为字符串则长度应小于等于 1000

customerVariables

不能为nil;customerVarialbes 内部不允许含有JSONObject或者JSONArray;

key 长度限制小于等于50,value 长度限制小等于1000,值不能为空串,也就是""。

// setPeopleVariable API原型
+ (void)setPeopleVariableWithKey:(NSString *)key andStringValue:(NSString *)stringValue;
+ (void)setPeopleVariableWithKey:(NSString *)key andNumberValue:(NSNumber *)numberValue;
+ (void)setPeopleVariable:(NSDictionary<NSString *, NSObject *> *)variable;
// setPeopleVariable API调用示例一
[Growing setPeopleVariableWithKey:@"gender" andStringValue:@"male"];
// setPeopleVariable API调用示例二
[Growing setPeopleVariable:@{@"gender":@"male", @"age":@"25"}];

setVisitor

2.4.0以上版本支持

当用户未登录时,定义用户属性变量,也可用于A/B测试上传标签。

参数说明:

参数名称

参数类型

是否必须

说明

variable

JSON Object

访问用户信息

参数限制条件:

参数名称

限制条件

variable

不能为nil;variable 内部不允许含有JSONObject或者JSONArray;

key 长度限制小于等于50,value 长度限制小等于1000,值不能为空串,也就是""。

// setVisitor 访问用户变量 API原型
+ (void)setVisitor:(NSDictionary<NSString *, NSObject *> *)variable;
// setVisitor API调用示例
[Growing setVisitor:@{@"gender":@"male", @"age":@"25"}];

setUserId

当用户登录之后调用setUserId API,设置登录用户ID。

参数说明:

参数名称

参数类型

是否必须

说明

userId

String

用户的登录用户ID

参数限制条件:

参数名称

限制条件

userId

英文数字组合的字符串,长度小于等于1000,且不能含有特殊字符,不允许传空、"" 或者nil,如有清除操作,请调用 clearUserId 方法

// setUserId API原型
+ (void)setUserId:(NSString *)userId;
// setuserId API调用示例
[Growing setUserId:@"1234567890"];

clearUserId

当用户登出之后调用clearUserId,清除已经设置的登录用户ID。

// clearUserId API原型
+ (void)clearUserId;
// clearUserId API调用示例
[Growing clearUserId];

埋点SDK支持的其他接口

埋点SDK除了支持上面的打点事件,还支持以接口,接口详情请参考IOS SDK API中的说明:

1,如果需要采样设置一个采样值  0.01即1% 0.001即1‰  最多支持小数点后5位
+ (void)startWithAccountId:(NSString*)accountId withAppId:(NSString*)appId withSampling:(CGFloat)sampling;
+ (void)startWithAccountId:(NSString*)accountId withSampling:(CGFloat)sampling;

2,默认采样100%
+ (void)startWithAccountId:(NSString*)accountId withAppId:(NSString*)appId;
+ (void)startWithAccountId:(NSString*)accountId;

3,命令行输出调试日志
+ (void)setEnableLog:(BOOL)enableLog;
+ (BOOL)getEnableLog;

4,若使用加密功能,请在UI元素初始化之前设置此函数
+ (void)setEncryptStringBlock:(NSString*(^)(NSString*string))block;

5,以下函数设置后会覆盖原有设置
// 并且只会在第一次安装后调用以保证同一设备的设备ID相同
// 请在方法startWithAccountId之前调用
// 使用自定义的ID 自定义ID长度不可大于64 否则会被抛弃NSUUID的UUIDString长度为36
+ (void)setDeviceIDModeToCustomBlock:(NSString*(^)(void))customBlock;

6,deeplink广告落地页参数回调设置
+ (void)registerDeeplinkHandler:(void(^)(NSDictionary*params, NSError*error))handler;

7,Universallink广告落地页参数回调设置
+ (void)registerUniversallinkHandler:(void(^)(NSDictionary*params, NSError*error))handler;

8,该函数请在main函数第一行调用APP启动后将不允许修改采集模式
+ (void)setAspectMode:(GrowingAspectMode)aspectMode;
+ (GrowingAspectMode)getAspectMode;

9,是否允许发送基本性能诊断信息,默认为开
+ (void)setEnableDiagnose:(BOOL)enable;

10,全局不发送统计信息
+ (void)disable;

11,设置发送数据的时间间隔(单位为秒)
+ (void)setFlushInterval:(NSTimeInterval)interval;
+ (NSTimeInterval)getFlushInterval;

12,设置每天使用数据网络(2G、3G、4G)上传的数据量的上限(单位是KB)
+ (void)setDailyDataLimit:(NSUInteger)numberOfKiloByte;
+ (NSUInteger)getDailyDataLimit;

13,设置数据收集平台服务器地址
+ (void)setTrackerHost:(NSString*)host;

14,设置设备报活服务器地址
+ (void)setReportHost:(NSString*)host;

15,设置数据查看平台服务器地址
+ (void)setDataHost:(NSString*)host;

16,设置数据后台服务器地址
+ (void)setGtaHost:(NSString*)host;

17,设置数据后台服务器地址
+ (void)setWsHost:(NSString*)host;

18,设置zone信息
+ (void)setZone:(NSString*)zone;

19,设置GDPR 生效
+ (void)disableDataCollect;

20,设置GDPR 失效
+ (void)enableDataCollect;

21,获取当前设备id
+ (NSString*)getDeviceId;

22,获取当前uid
+ (NSString*)getVisitUserId;

23,获取当前访问id
+ (NSString*)getSessionId;

Last updated