iOS SDK 全埋点的进阶使用

最后更新于:2019-11-22 17:37:31

全埋点采集策略

神策 iOS SDK 全埋点包括四个自动采集的事件:

$AppStart(App 启动) 事件

App 启动或从后台恢复时,触发 $AppStart 事件,事件中包含以下属性:

  • $is_first_time - Bool 类型,标识本次启动是否为 App 安装后首次启动。
  • $is_first_day - Bool 类型,标识本次启动与 App 安装后的首次启动是否为同一天。
  • $resume_from_background - Bool 类型,Yes 为从后台恢复,No 为冷启动。

注1$AppStartPassively(App被动启动)事件是一种系统后台唤醒的启动事件,事件属性和 $AppStart 事件相同,更多信息可参考App 被动启动($AppStartPassively) 是什么事件?

$AppEnd(App 退出)

App 进入后台或被强制退出时,触发 $AppEnd 事件,事件中包含以下属性:

  • $event_duration - Number 类型,本次退出与最近一次 App 启动的事件间隔,单位为秒。

$AppViewScreen(App 浏览页面) 事件

App 浏览页面(UIViewController 的 -viewDidAppear:被调用)时,会触发 $AppViewScreen 事件,事件中包含以下属性:

  • $title - String 类型,SDK 会尝试从navigationItemtitleViewtitle 属性中控制器的标题信息。
  • $screen_name - String 类型,默认值为当前 ViewController 类名。

$AppClick(App 元素点击) 事件

控件被点击时,触发 $AppClick 事件,并且包含该控件的基本信息:

  • $element_type - String 类型,表示控件的类型。
  • $element_content - String 类型,表示控件的内容
  • $title - String 类型,表示控件所在页面的标题信息
  • $screen_name - String 类型,表示控件所在页面的类名
  • $element_position - String 类型,cell 点击时特有的属性,表示控件位置信息,格式为section:row

事件的忽略与补充

对于全埋点中 App 页面浏览和 App 元素点击,开启全埋点后,SDK 也支持通过配置忽略部分页面或控件的采集。

忽略页面的浏览事件

// 该方法支持多次调用,对合集进行忽略
[[SensorsAnalyticsSDK sharedInstance] ignoreAutoTrackViewControllers:@[@"MyViewController",
                                                                       @"BaseViewController"]];

忽略某个控件的点击事件

button.sensorsAnalyticsIgnoreView = YES;

忽略某类控件的点击事件

// 该方法支持多次调用,对合集进行忽略
[[SensorsAnalyticsSDK sharedInstance] ignoreViewType:[MyButton class]];
[[SensorsAnalyticsSDK sharedInstance] ignoreViewType:[MyView class]];

如果没有开启全埋点,但是想采集部分页面的浏览或部分控件的点击事件,SDK 也有相应的接口支持代码触发 App 页面浏览和 App 元素点击事件。

手动触发页面的浏览事件

// 可在 `viewDidAppear:` 中调用代码进行触发
[[SensorsAnalyticsSDK sharedInstance] trackViewScreen:self.childViewControllers[0]];

注1神策分析点击图、可视化全埋点功能,只支持全埋点方式触发的 App 点击事件。

手动触发控件的点击事件

[[SensorsAnalyticsSDK sharedInstance] trackViewAppClick:button];

属性的补充与修改

如果在使用全埋点 App 页面浏览和 App 元素点击时遇到如下问题:

  • 需要给控件或页面添加自定义信息
  • 部分预置属性未采集到,如图片按钮采集不到 $element_content 属性,页面未采集到 $title 属性
  • 采集的预置属性不符合业务需求

则需要您在代码中对全埋点采集的属性进行手动设置,SDK 会使用代码中设置值对全埋点属性进行补充或覆盖。

页面设置自定义信息

通过实现 -getTrackProperties 协议方法给页面设置自定义属性

// 1. UIViewController 遵循 `SAAutoTracker` 协议
// 2.`- getTrackProperties` 协议方法中返回自定义的页面信息
- (NSDictionary *)getTrackProperties {
    return @{@"$title": @"首页",
             @"type": @"vendor"};
}

注1 通过此方式设置的页面属性,页面浏览事件全部生效;元素点击事件只有 $title$screen_name 会进行生效。

页面设置来源($referrer)信息

如果需要在 App 浏览页面事件中添加当前页面的来源信息,可以通过实现 -getScreenUrl: 返回一个自定义的页面标识。 自定义的页面标识会设置到当前页面的 $url 属性中,同时该标识会设置到下一个页面的 $referrer 属性中。后续通过 $referrer 属性即可得知当前页面的上一个页面信息。

// 1. UIViewController 遵循 `SAScreenAutoTracker` 协议
// 2.`- getScreenUrl` 协议方法中返回自定义的页面标识
- (NSString *)getScreenUrl {
    return @"sa://page/product_detail"
}

控件设置自定义属性

继承自 UIView 的控件,可通过 sensorsAnalyticsViewProperties 设置自定义信息。

homeBtn.sensorsAnalyticsViewProperties = @{@"$element_content": @"首页"};

cell 设置自定义属性

cell 存在重用机制,不能直接设置 sensorsAnalyticsViewProperties 属性,需要使用如下方法进行设置:

// 1. 给 tableView 或 collection 设置 `sensorsAnalyticsDelegate`
self.tableView.sensorsAnalyticsDelegate = self;

// 2. `sensorsAnalyticsDelegate` 中实现相应方法并返回自定义属性
-(NSDictionary *) sensorsAnalytics_tableView:(UITableView *)tableView autoTrackPropertiesAtIndexPath:(NSIndexPath *)indexPath {
    return @{@"customProperty":@"MyValue"};
}

// 3. 在 `viewWillDisappear`方法中将 `sensorsAnalyticsDelegate` 设置为 `nil`
-(void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    self.tableView.sensorsAnalyticsDelegate = nil;
}