获取iOS SDK以下包并解压,由GrowingIO提供。
将Growing.h、GrowingCDPCoreKit.framework 添加到iOS工程中;记得勾选“Copy item if needed“。
在工程项目中添加以下库文件:
添加库依赖的位置在项目设置 Target > 选项卡General > Linked Frameworks and Libraies。
库名称 | 说明 |
Foundation.framework | 基础依赖库 |
CoreTelephony.framework | 用于读取运营商 |
SystemConfiguration.framework | 用于判断网络状态 |
AdSupport.framework | 用于来源管理激活匹配 |
libsqlite3.tbd | 存储日志 |
CoreLocation.framework | 用于读取地理位置信息(如果您的App有权限) |
添加编译参数,并注意大小写。
添加URL Scheme到项目中,以便唤醒您的程序。
在AppDelegate 中引入#import "Growing.h"并添加初始化方法。
#import "Growing.h"- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// 启动GrowingIO[Growing startWithAccountId:@"您的项目ID" dataSourceId:@"您的数据源ID"]; // 替换为您的项目ID和数据源ID// 其他配置,设置埋点上报地址[Growing setTrackerHost:@"http://test.xxx.com"];// 开启Growing调试日志 可以开启日志// [Growing setEnableLog:YES];}
在 AppDelegate 中添加
因为您代码的复杂程度以及iOS SDK的版本差异,有时候 [Growing handleUrl:url] 并没有被调用。请在各个平台上调试这段代码,确保当App被URL scheme唤醒之后,该函数能被调用到。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{// 如果没有触发handleUrl 扫码弹窗 和扫码注册推送不生效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)annotatio
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。
对于iOS 14之前,你无需主动获取 广告标识IDFA
的权限
对于iOS 14之后,你需要使用如下方法来开启你的 广告标识IDFA
的权限
Plist 文件中添加 NSUserTrackingUsageDescription
<key>NSUserTrackingUsageDescription</key><string>GrowingIO测试demo 需要使用你的广告标识信息以用于数据追踪分析</string> //描述内容请根据App修改
导入框架 #import <AppTrackingTransparency/AppTrackingTransparency.h>
调用获取权限代码
if (@available(iOS 14, *)) {// iOS14及以上版本需要先请求权限[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {switch (status) {case ATTrackingManagerAuthorizationStatusDenied://用户拒绝向App授权break;case ATTrackingManagerAuthorizationStatusAuthorized://用户同意向App授权break;case ATTrackingManagerAuthorizationStatusNotDetermined://用户未做选择或未弹窗break;case ATTrackingManagerAuthorizationStatusRestricted://用户在系统级别开启了限制广告追踪break;default:break;}}];}
GrowingIO 初始化配置项均在 AppDelegate.m 文件中的 didFinishLaunchingWithOptions 方法中SDK初始化代码块中设置,下面将分类并描述含义。
API | 默认值 | 是否必填 | 说明 |
startWithAccountId:AccountId dataSourceId:dataSourceId | 无 | 是 | 初始化方法,AccountID为项目id; dataSourceId为数据源ID,默认采样率为100%。 |
startWithAccountId:AccountId dataSourceId:dataSourceId withSampling:sampling | 无 | 是 | 初始化方法,AccountID为项目id; dataSourceId为数据源ID;sampling为采样率。 |
代码示例:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.[Growing startWithAccountId:@"YOUR_ACCOUNT_ID" dataSourceId:@"YOUR_DATASOURCE_ID"];//输出调试日志[Growing setEnableLog:YES];return YES;}
GrowingIO所有API 都需要在主线程调用。
API | 说明 |
sdkVersion | 获取当前GrowingIO SDK版本号。 |
setEnableLog | 采集日志开关,setEnableLog=YES时会输出调试日志。 |
getEnableLog | 获取采集日志开关的当前状态。 |
setZone | 设置zone信息,即时区信息。 |
getDeviceId | 获取当前设备ID。 |
getVisitUserId | 获取当前访问用户ID。 |
getSessionId | 获取当前访问ID。 |
setTrackerHost | 设置数据收集平台服务器地址。 |
API | 默认值 | 说明 |
setAspectMode | 无 | 设置数据采集模式,有GrowingAspectModeSubClass 和GrowingAspectModeDynamicSwizzling 两种。 |
setFlushInterval | 15s | 设置、获取发送数据的事件间隔,默认设置15s。 |
setDailyDataLimit | 10485KB | 设置每天使用数据网络(2G、3G、4G)上传的数据量的上限,默认值10485KB(10MB)。 |
getDailyDataLimit | 无 | 获取每天使用数据网络(2G、3G、4G)上传的数据量的上限,默认值10485KB(3MB)。 |
disableDataCollect | 无 | 设置GDPR生效。 |
enableDataCollect | 无 | 设置GDPR失效。 |
setEnableLocationTrack | Yes | 设置是否采集地理位置的统计信息,默认采集。 |
getEnableLocationTrack | 无 | 获取是否采集地理位置。 |
当用户登录之后调用 setUserId ,设置登录用户ID。
// setUserId API原型+ (void)setUserId:(NSString *)userId;
参数名称 | 类型 | 是否必须 | 说明 |
userId | string | 是 | 登录用户的用户ID。 |
Tips :
如果您的App每次用户升级版本时无需重新登录的话,为防止用户本地缓存被清除导致的无法被识别为登录用户,建议在用户每次升级App版本后初次访问时重新调用上述setUserId方法。
当用户登出之后调用clearUserId ,清除已经设置的登录用户ID。
// clearUserId API原型+ (void)clearUserId;
发送一个自定义事件,在添加所需发送的时间代码之前,需要在打点管理用户界面声明事件以及事件属性。
参数名称 | 类型 | 是否必须 | 说明 |
eventId | string | 是 | 事件标识符。 |
variable | NSDictionary | 否 | 事件发生时所伴随的维度信息。 限制:非空;variable 内部不允许含有 NSDictionary或者NSArray; key 长度限制小于等于50,value 长度限 制小等于200,值不能为空串,也就是""。 |
itemId | string | 否 | 物品模型唯一标识属性,如“order_id" |
itemKey | string | 否 | 物品模型唯一标识属性值,如“123456” |
代码示例:
// track API原型+ (void)track:(NSString *)eventId;+ (void)track:(NSString *)eventId withVariable:(NSDictionary<NSString *, NSObject *> *)variable;+ (void)track:(NSString *)eventId withVariable:(NSDictionary<NSString *, NSObject *> *)variable forItem:(NSString *)itemId itemKey:(NSString *)itemKey;// track API调用示例一[Growing track:@"registerSuccess"];// track API调用示例二 - 事件属性[Growing track:@"registerSuccess" withVariable:@{@"gender":@"male", @"age":@"21"}];// track API调用示例三 - 物品模型[Growing track:@"registerSuccess" withVariable:@{@"gender":@"male", @"age":@"21"} forItem:@"order_id" itemKey:@"123456"];
发送一个自定义的用户事件。
参数名称 | 类型 | 是否必填 | 说明 |
attributes | NSDictionary<NSString *,id>* | 是 | 用户事件携带的其他信息。 |
// setUserAttributes API原型+ (void)setUserAttributes:(NSDictionary<NSString *, id>*)attributes;//代码示例NSDictionary *dict = @{@"age" : 18, @"name": @"growingIO"};[Growing setUserAttributes:dict];
参数名称 | 类型 | 是否必须 | 说明 |
pageName | string | 是 | page事件标识符。 |
/**发送自定义Page事件@param pageName : 页面名称, pageName为正常中英文数字组合的字符串, 长度<=1000, 请不要含有 "'|\*&[email protected]/', 等特殊字符*/+ (void)trackPage:(NSString *)pageName;//代码示例[Growing trackPage:@"TestPageEvent"];
参数名称 | 类型 | 是否必须 | 说明 |
webView | WKWebView | 是 | WKWebView |
+ (void)bridgeForWKWebView:(WKWebView *)webView;//代码示例WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame];[Growing bridgeForWKWebView:webView];
需要在 webview 初始化后调用