iOS无埋点 SDK集成

anwei发表于:2019年12月05日 14:30:55更新于:2019年12月05日 14:39:04

ios无埋点 SDK集成

准备条件

获取项目ID,请参考查看项目基本信息

获取URL Scheme,在GrowingIO平台创建对应的应用时会生成URL Scheme。请参考创建应用

使用GrowingIO平台创建相应的应用,平台在应用创建界面自动为您生成已加载当前项目ID、URL Scheme的跟踪代码。

1. 添加跟踪代码

集成环境:Xcode 9.0及以上;

App适配最低系统版本:iOS 8及以上

组件化SDK

GrowingIO iOS SDK 包含以下2个组件SDK:

• GrowingCoreKit (组件基础库,具备分析功能)

• GrowingAutoTrackKit (无埋点库)

请保证Growing、GrowingCoreKit、GrowingAutoTrackKit版本号一致。

1. 添加依赖

使用CocoaPods快速添加

手动添加

  1. 在您的Podfile中添加pod 'GrowingAutoTrackKit'

  2. 执行或 pod update 更新pod依赖库。不要使用 --no-repo-update选项。

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

在工程项目中添加以下库文件。

添加项目依赖库的位置在项目设置target -> 选项卡General -> Linked -> Linked Frameworks and Librarie

库名称

说明

Foundation.framework

基础依赖库

Security.framework

用户App连接圈选页面SSL连接

CoreTelephony.framework

用于读取运营商

SystemConfiguration.framework

用于判断网络状态

AdSupport.framework

用于来源管理激活匹配

libicucore.tbd

用户App连接圈选页面解析

libsqlite3.tbd

存储日志

CoreLocation.framework

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

JavaScriptCore.framework

Web圈选App交互

WebKit.framework

Web圈选

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



-Lo08UtW7H58ehFKeZ4g-LrxVkRtAeuEzwbNRAHi-LrxWGcZdBRokiA1lR4eimage.png

2. 添加 URL Scheme

添加URL Scheme 到项目中,以便唤醒您的程序进行圈选。



-Lo08UtW7H58ehFKeZ4g-Ls-n-bOnkWszGT2CT3e-Ls-xYj4lVpzWhHbuY0timage.png


3. 初始化配置

在 AppDelegate 中引入#import "Growing.h"并添加初始化方法。


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


请确保将代码添加在上述位置,添加到其他方法或异步block中可能导致数据不准确。

4.添加激活圈选的代码

在 AppDelegate 中添加激活圈选的代码


因为您代码的复杂程度以及iOS SDK的版本差异,有时候 [Growing handleUrl:url] 并没有被调用。请在各个平台上调试这段代码,确保当App被URL scheme唤醒之后,该函数能被调用到。


- (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)annotatio

2. 重要配置


下列内容为常用配置,更多属性及接口详细信息见 Growing.h

1. 设置页面别名

有些时候,对于完成某个功能的页面,统计时可能需要进一步细分。 比如,对于展示商品列表的页面,需要区分衣物类商品,以及食品类商品的两种列表的访问量。

为处理这种场景,我们提供了取别名的方法来区分这两种情况下的页面,方法如下:


//手动标识该页面的标题,必须在该UIViewController显示之前设置
@property (nonatomic,copy) NSString* growingAttributesPageName;


  1. 必须在该UIViewController显示之前设置。

  2. 页面别名建议设置为字母、数字、下划线的组合。

  3. 未查看数据方便,请尽量对不同端、不同页面的取不同的名称。

2. 设置界面元素ID

当您的应用界面改版时,可能会导致无法准确地统计已经圈选的元素。因此,对于应用中的主要流程涉及到的界面元素,建议您为它们设置固定的唯一ID,以保证数据的一致性。


  • 主要流程是指登录、注册、购买、发帖等操作步骤

  • 被设置 ID 的对象是界面的重要元素,如“注册”、“结算”、“发布”等按钮

若要为元素设置ID,请在viewWillAppear或者时机更早的方法里添加以下代码:


-(void)viewWillAppear {    
    UIView *MyView;    
    …    
    MyView.growingAttributesUniqueTag = @"my_view";
}


  • ID 只能设置为字母、数字和下划线的组合

  • 对于已经集成过旧版SDK并圈选过的应用,对某个元素设置ID后再圈选它,指标数值会从零开始计算,类似初次集成SDK后发版的效果,但不影响之前圈选的其它指标数据。如果不希望出现这种情况,请不要使用这个方法。

3. 设置元素内容

当您想采集一些可能没有文字的控件(比如UIImageView,UIView)时,也可以给属性growingAttributesValue 赋值作为文字,用来在圈选的时候区分不同的内容。

如果您的 app 上方有横向滚动的 Banner 广告,若要收集 Banner 相关数据,请在响应点击的控件上添加如下代码:


UIView *view;
…
view.growingAttributesValue = 广告的唯一ID;

其中 view 是您的广告元素,请确保两点:

  • 对不同广告图,广告的唯一 ID 也不相同

  • 响应点击的控件,与设置 ID 的控件是同一个

【例子】当您的横向滚动广告共有3张广告图时,您可以在3个响应点击的View上分别设置不同的广告唯一ID,实现方式:


view1.growingAttributesValue = @"ad1";
view2.growingAttributesValue = @"ad2";
view3.growingAttributesValue = @"ad3";

4. 采集输入框数据

如果您需要采集应用内某个输入框内的文字(例如搜索框),请调用如下接口进行设置:


UIView *view; // view 可以是 UITextField, UITextView, UISearchBar 
   ...
view.growingAttributesDonotTrackValue = NO;

view代表要被采集的输入框。 当这个输入框失去焦点(包括应用退到后台),且输入框内容跟获取焦点前相比发生变化时,输入框内文字会被发送回GrowingIO。


对于密码输入框,即便标记为需要采集,SDK也会忽略,不采集它的数据。

5. Facebook广告SDK

如果您使用了 Facebook 广告 SDK,请务必在 main 函数第一行调用以下代码来避免冲突,否则可能造成无法创建项目或者统计准确性问题。注意:APP启动后,将不允许修改采集模式。


[Growing setAspectMode:GrowingAspectModeDynamicSwizzling];

6.采集WebView页面数据

SDK会自动采集H5页面的数据,不需要特殊配置。

7. 采集GPS数据

如果您的应用有相应的圈选,SDK将自动采集您的GPS数据。


SDK 2.8.6及以上版本支持手动关闭采集GPS数据。

//设置为NO,将关闭GPS采集   +(void)setEnableLocationTrack:(BOOL)enable;

8. 启用Hashtag识别

您可以在项目中添加以下方法以启用Hashtag识别:


// 设置为 YES, 将启用 HashTag
+ (void)enableHybridHashTag:(BOOL)enable;

9. GDPR数据采集开关

SDK 版本支持:2.3.2及以上。

GrowingIO SDK 针对欧盟区的一般数据保护法(GDPR)提供了以下的API共开发者调用。


// 开启GDPR,不采集数据
[Growing disableDataCollect]; 

// 关闭GDPR,采集数据
[Growing enableDataCollect];

10. DeepLink & Universal Link

DeepLink功能

SDK版本

基础DeepLink功能(Scheme打开App至首页)

>=2.3.0

直达落地页(Scheme打开至活动页)

>=2.3.2

Universal Link、应用宝微下载链接支持

>=2.4.1

DeepLink

  1. 确认URl Scheme添加正确。

  2. 添加自定义参数回调方法:


/** 
   deeplink广告落地页参数回调设置 
   
   @param handler deeplink广告落地页参数回调, params 为解析正确时回调的参数, processTime为从app被deeplink唤起到handler回调的时间(单位秒), error 为解析错误时返回的参数.                 
          handler 默认为空, 客户需要手动设置. 
   */
+ (void)registerDeeplinkHandler:(void(^)(NSDictionary *params, NSTimeInterval processTime, NSError *error))handler;


//DeepLink 调用示例
[Growing registerDeeplinkHandler:^(NSDictionary *params, 
        NSTimeInterval processTime, NSError *error) {        NSLog(@"params : %@", params);        
        XCTAssertNotNil(params);        
        XCTAssertEqualObjects(params[@"key1"], @"value1");        
        XCTAssertEqualObjects(params[@"key2"], @"value2"); 
}];


  • params参数为您在DeepLink页面设置的”直达落地页参数“。

  • SDK版本 < 2.8.5 请在 + (BOOL)handleUrl:(NSURL*)url被调用前注册回调方法。

  • SDK版本 >= 2.8.5 请保证注册回调方法的时机在startWithAccountId函数之前,并且在主线程当中。

Universal Link

使用Universal Link唤醒App,步骤如下:

1.配置链接:配置Universal Link、应用宝微下载(可选项)

2.请在AppDelegate.m添加以下代码:


- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{    
     [Growing handleUrl:userActivity.webpageURL];	
   return YES;
}

3. 添加Universal Link参数解析回调方法,此方法与DeepLink方法一致。

11. 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

12. 采集推送

在IOS SDK 2.6.3 版本, 支持采集用户点击本应用的通知的题和内容。此功能默认关闭,如需开启,请在 Application 初始化 GrowingIO 中设置,例如:


- (BOOL)application:(UIApplication *)application    
     didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
  ...  
  //开启推送点击采集  
  [Growing disablePushTrack:NO];  
  ...  
  }

查看通知采集数据

支持对于通知的展现和点击事件的采集,GrowingIO 并未增加新的采集事件类型,而是使用了自定义事件发送,所以需要您创建自定义事件和事件级变量,事件级变量标识符为notification_titlenotification_content,自定义事件的标识符为notification_shownotification_click如图:


iOS SDK 不支持通知展现的事件采集,但是 Android SDK 支持。

这里为了满足大部分客户都有 Android 和 iOS 两个应用的情况,创建的推送展示自定义事件的统计值为0。

13. 浏览事件的半自动采集配置

SDK版本支持:>=2.8.4

「用户浏览事件」半自动采集方案已经上线,详细配置请参考iOS半自动采集浏览事件

  • 事件/元素采集更具针对性,提升采集效率

  • 优化采集逻辑,贴合业务场景,提升数据准确性

  • 浏览事件关联自定义事件和变量,减少研发埋点工作量

3.自定义数据上传


除上述的用户行为数据(无埋点数据)之外,GrowingIO 还提供了多种 API 接口,供您上传一些自定义的数据指标及维度 ,请参考iOS SDK API > 自定义数据上传API

4. 创建应用


添加代码之后,请先Clean项目,然后再进行编译,并在你的 iOS App 安装了 SDK 后重新启动几次 App,保证行为采集数据自动发送给 GrowingIO,以便顺利完成检测。

在GrowingIO平台的应用创建页面继续完成应用创建的数据检测,检测成功后应用创建成功。

5. 验证SDK是否正常采集数据


了解GrowingIO平台数据采集类型请参考数据模型

GrowingIO为您提供多种验证SDK是否正常采集数据的方式:

方式一:Mobile Debugger

方式二:在SDK中设置了Debug模式后,在IDE编译器控制台查看数据采集日志。

方式三:数据校验