iOS信息流分析

概述

信息流分析功能,是百度移动统计新推出的统计功能,是针对用户在App中“信息列表”模块的行为分析。

MTJ会帮助应用统计所有的“列表控件”及其“信息元素”的展现、浏览、点击等行为。

使用该功能需要集成最新版(V4.8.0以上)的“应用分析(无埋点)”类型的SDK。

概念解释图:

控件举例

如上图的app结构中,MTJ会获取“列表”的展现次数、“每一条新闻”的展现次数、展现时长、点击次数等信息,通过信息流分析报表给您展现统计结果。

适用场景

  • iOS中,信息流分析功能针对的“列表控件”指UITableView控件,“信息元素”指UITableViewCell控件。
  • 如果您的app中有列表控件,无论是“新闻列表”、“商品列表”、“联系人列表”,只要是UITableView的控件类型,均可以被获取到。

集成步骤

  • 下载并集成MTJ最新版的“应用分析(无埋点)”类型的SDK您可以前往SDK中心下载对应的版本、并按照本文档的集成步骤进行集成。

SDK中心

  • 当您完成上述的“集成步骤”之后,SDK会自动开启信息流分析功能,整个集成只需要一行初始化代码。

测试步骤

  • 当您完成了集成操作,启动app,正常浏览应用中的“列表”,浏览完成后退出app。

    • 如果您在初始化代码[[BaiduMobStat defaultStat] startWithAppId:@"APP KEY"];前调用接口打开了SDK调试开关:[[BaiduMobStat defaultStat] setEnableDebugOn:NO];,那么在每次列表浏览结束时,会有调试Log在Xcode窗口中:[BaiduMobStat]:Put list,证明统计功能正常。
  • 再次启动app(kill之后重新打开、或放置后台30s之后重新打开),sdk将会把之前的信息流数据日志发送回MTJ服务器。

    • 同第一步所述,如果打开了SDK调试开关,在app启动时,会在Xcode调试窗口中看到如下Log,说明发送成功:[BaiduMobStat]:Send log success
  • 登录MTJ官网,查看信息流分析报表的数据。由于MTJ服务器是以小时级处理报告,所以可能有一定时间的延迟,请耐心等待。

报表查看

  • 登录MTJ网站,并选择您的应用查看报告。
  • 选择页面顶部的“探索”tab。
  • 报表中相关指标解释可以在web中查看。

报表效果

MTJ将每一个列表定义为一个栏目,通过报表可以看到栏目的使用情况,以及栏目下每个信息元素的展现、使用情况。

(可选)其他个性化参数设置

  • 监控模式设置

    A) 接口声明:

  1. /**
  2. 设置TableView监控策略
  3. 默认为BaiduMobStatFeedTrackStrategyAll,全部监控
  4. 设置为BaiduMobStatFeedTrackStrategySingle单个监控,则要监控的tableview需要设置enableListTrack属性为YES
  5. 设置为BaiduMobStatFeedTrackStrategyNone,则不监控任何列表
  6. */
  7. @property (nonatomic, assign) BaiduMobStatFeedTrackStrategy feedTrackStrategy;

B)接口调用举例:

  1. [BaiduMobStat defaultStat].feedTrackStrategy = BaiduMobStatFeedTrackStrategyAll;

C) 调用位置:

集成步骤的第6步介绍SDK的初始化代码[[BaiduMobStat defaultStat] startWithAppId:@"APP KEY"];前调用feedTrackStrategy设置接口。即:

  1. [BaiduMobStat defaultStat].feedTrackStrategy = BaiduMobStatFeedTrackStrategyAll;
  2. [[BaiduMobStat defaultStat] startWithAppId:@"APP KEY"];

D) 调用场景:

  • 默认情况下,SDK采用第一种BaiduMobStatFeedTrackStrategyAll策略,会监控所有的列表浏览信息。

  • 如果您只想要监控个别列表信息,可以将策略设置为BaiduMobStatFeedTrackStrategySingle,此时SDK只会监控您代码中指定开启的列表。指定列表的接口,是UITableView的enableListTrack属性,下面会详细介绍。

  • 如果您不想监控任何列表信息,即不使用信息流监控功能,则可以将策略设置为BaiduMobStatFeedTrackStrategyNone。

  • 指定开启单个列表监控

    A) 接口声明:

  1. /**
  2. * 设置单个TableView是否需要被监控
  3. * 默认情况下,sdk监控全局TableView,不需要设置该接口
  4. * 当设置了全局关闭之后,可以设置单个tableview打开指定的TableView监控
  5. */
  6. @property (nonatomic, assign) BOOL enableListTrack;

B) 接口调用举例:

  1. //UITableView对象
  2. UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) style:UITableViewStylePlain];
  3. //调用category属性,设置开启
  4. myTableView.enableListTrack = YES;
  5. [self.view addSubview:myTableView];

C) 调用位置:

在对应的UITableView控件加载展现之前(建议是UITableView init初始化完成就设置),调用enableListTrack接口,将列表设置为需要监控对象。

D) 调用场景:

  • 在BaiduMobStatFeedTrackStrategySingle模式下,只有enableListTrack被设置为YES的列表,会被监控。

  • 在其他两种模式下,enableListTrack属性无效。

  • 因为MTJ SDK对UITableView进行了Category扩展,所以直接调用UITableView对象的enableListTrack赋值,即可完成开启设置。

  • 列表名称设置

    A) 接口声明:

  1. /**
  2. * 设置TableView的栏目名称,为MTJ分析信息流报表中的”栏目名称“,长度限制256字节,超出截断
  3. * 如果不设置,则默认采用tableview所在的Controller title作为“栏目名称”
  4. * 建议在TableView加载前设置。
  5. */
  6. @property (nonatomic, copy) NSString *listName;

B) 接口调用举例:

  1. //UITableView对象
  2. UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) style:UITableViewStylePlain];
  3. //调用category属性,设置开启
  4. myTableView.listName = @"首页新闻";

C) 调用位置: 在对应的UITableView控件加载展现之前(建议是UITableView init初始化完成就设置),调用listName接口,设置列表的名称。

D) 调用场景:

  • 设置的列表名称后,该列表将会以这个listName作为识别名称,在MTJ报表中展现。

  • 默认情况下,MTJ会自动识别列表名称,大部分情况下是列表所在页面的title。如果您觉得名称不准确、或者要设置自己的识别名称,可以通过UITableView的Category属性listName进行手动设置。

  • 注意:如果您多个列表设置为相同的名称,则MTJ将识别为同一个列表,进行统计。

  • 举例说明,如果您的app中,在不同页面下都有“商品列表”控件要区分统计,则可以通过设置listName分别为“商品列表_1”、“商品列表_2”等格式进行区分。

  • 内容元素Title设置

    A) 接口声明:

  1. /**
  2. * 设置Cell的信息Title,为MTJ分析信息流报表中的”信息标题“,长度限制256字节,超出截断
  3. * 如果不设置,则SDK会自动识别一个Title
  4. * 建议在cell加载前设置。
  5. */
  6. @property (nonatomic, copy) NSString *contentTitle;

B) 接口调用举例:

  1. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  2. NSString *cellIdentifier = @"cellIdentifier";
  3. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
  4. if (!cell) {
  5. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
  6. [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
  7. }
  8. if (indexPath.row == 2) { // 找到目标cell,设置对应名称
  9. cell.contentTitle = @"新闻标题一";
  10. } else { // 由于Cell是重用的,不是目标cell,需要清除contentTitle设置
  11. cell.contentTitle = nil;
  12. }
  13. return cell;
  14. }

C) 调用位置:

这里如上方调用举例,建议在UITableView的delegate函数tableView:cellForRowAtIndexPath:中,进行contentTitle 设置。注意Cell的重用机制,需要在不是目标cell时,进行清除contentTitle设置。

D) 调用场景

  • 设置的Title后,该Cell元素将会以这个Title作为识别名称,在MTJ的报表中展现。

  • 默认情况下,SDK会自动识别cell中的文字Title,即以Cell元素中字体最大的控件文字为标题。

  • 当您觉得识别不准确、或者不想用该title进行统计时,可以在UITableViewCell展现之前,调用Category属性contentTitle,设置自定义的Title。

  • 内容元素contentId设置(目前不在报表中展现)

    A) 接口声明:

  1. /**
  2. * 设置Cell的信息ID,是用户自身系统中的内容id,长度限制256字节,超出截断
  3. * 如果不设置,则id为空
  4. * 建议在cell加载前设置。
  5. */
  6. @property (nonatomic, copy) NSString *contentId;

B) 接口调用举例:

  1. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  2. NSString *cellIdentifier = @"cellIdentifier";
  3. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
  4. if (!cell) {
  5. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
  6. [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
  7. }
  8. if (indexPath.row == 2) { // 找到目标cell,设置对应名称
  9. cell.contentId = @"1";
  10. cell.contentTitle = @"新闻标题一";
  11. } else { // 由于Cell是重用的,不是目标cell,需要清除contentID设置
  12. cell.contentId = nil;
  13. cell.contentTitle = nil;
  14. }
  15. return cell;
  16. }

C) 调用位置:

这里如上方调用举例,建议在UITableView的delegate函数tableView:cellForRowAtIndexPath:中,进行contentId 设置。注意Cell的重用机制,需要在不是目标cell时,进行清除contentId设置。

D) 调用场景:

  • 默认情况下,每一个元素UITableViewCell的contentId信息是空的。

  • 如果您希望统计自己业务系统中,这条信息的id,可以通过UITableViewCell的Category属性contentId进行设置。

  • 这里如上方调用举例,建议在UITableView的delegate函数中,进行设置。注意Cell的重用机制,需要在不是目标cell时,进行清除contentTitle设置。