全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网

移动数据分析

更新时间:2017-09-14 14:14:19

Mobile Analytics iOS SDK开发指南


1. 前言

本文档介绍了移动数据分析(Mobile Analytics) iOS SDK的使用方式。


Mobile Analytics iOS SDK是阿里云面向移动开发者提供的iOS平台下的数据统计与监控服务。通过该SDK,开发者可以在自己的APP中便捷地进行数据埋点,监控日常的业务数据与性能数据,并通过阿里云控制台界面观察对应的数据报表展现。另外,用户可以通过设定自定义的数据解析规则实现定制化的数据图表展现。

您可以通过获取alicloud-ios-demo工程源码获得移动数据分析服务的使用例程。


2. 安装Mobile Analytics iOS SDK

2.1 注意

  • 使用1.0.7及之前版本请在【Crash分析】板块查看crash信息。

  • 使用1.1.8版本及之后的版本,请在【新版Crash分析】板块查看crash信息。推荐使用1.1.8及之后的版本,crash数据更加准确,丢包率更小。

  • 删除- (ALBBMANTracker *)getTracker:(NSString) trackerId方法,请使用- (ALBBMANTracker *)getDefaultTracker代替。

  • 删除- (void)setCrashCaughtListener:(id<ALBBMANICrashCaughtListener>)aListener方法,1.0.8及之后的版本使用新的crash模块,无需再调用次方法设置参数。

2.2 手动集成SDK

将下载的包加至Link Binary With Libraries,包括:

  1. AlicloudMobileAnalytics.framework
  2. UTMini.framework
  3. UTDID.framework
  4. CrashReporter.framework

加载系统必须依赖的包:

  1. libz.tbd
  2. libresolv.tbd
  3. libsqlite3.tbd
  4. CoreTelephony.framework
  5. SystemConfiguration.framework

2.3 Pod集成

  • 指定Master仓库和阿里云仓库:
  1. source 'https://github.com/CocoaPods/Specs.git'
  2. source 'https://github.com/aliyun/aliyun-specs.git'
  • 添加依赖:
  1. pod 'AlicloudMAN', '~> 1.0.8'

(~>为模糊指定版本号方式,~> 1.0.8表明引用版本位于1.0.8 <= version < 1.1之间的最新版本SDK,用户可参考Podfile Syntax Reference,根据项目需要指定SDK版本。)

2.4 引用头文件

  1. #import <AlicloudMobileAnalitics/ALBBMAN.h>

特别说明:应用的targets->Build Settings->linking->Other Linker Flags,请加上-ObjC这个属性。

3. 获取Mobile Analytics服务

在您使用Mobile Analytics iOS SDK进行数据统计与监控前,您需要首先获取Mobile Analytics服务,然后可以进行版本和渠道的配置。

  1. // 获取MAN服务
  2. ALBBMANAnalytics *man = [ALBBMANAnalytics getInstance];
  3. // 打开调试日志,线上版本建议关闭
  4. // [man turnOnDebug];
  5. // 初始化MAN
  6. [man initWithAppKey:testAppKey secretKey:testAppSecret];
  7. // appVersion默认从Info.list的CFBundleShortVersionString字段获取,如果没有指定,可在此调用setAppversion设定
  8. // 如果上述两个地方都没有设定,appVersion为"-"
  9. [man setAppVersion:@"2.3.1"];
  10. // 设置渠道(用以标记该app的分发渠道名称),如果不关心可以不设置即不调用该接口,渠道设置将影响控制台【渠道分析】栏目的报表展现。
  11. [man setChannel:@"50"];

4. 业务数据统计

数据统计的准确性依赖被监控APP的常规生命轨迹,比如应用启动次数依赖于用户正常退出应用触发的上报策略。

4.1 登录/注册会员

4.1.1 登录会员

接口:

  1. - (void)updateUserAccount:(NSString *)pNick userid:(NSString *)pUserId;

功能: 获取登录会员,然后会给每条日志添加登录会员字段

是否必须调用: 否

调用时机: 登录时调用

备注: 阿里云 平台上的登录会员 UV 指标依赖该接口

4.1.2 注册会员

接口:

  1. - (void)userRegister:(NSString *)pUsernick;

功能: 产生一条注册会员事件日志

是否必须调用: 否

调用时机: 注册时调用

备注: 阿里云 平台上注册会员指标依赖该接口

4.1.3 代码示例

  1. ALBBMANAnalytics *man = [ALBBMANAnalytics getInstance];
  2. [man userRegister:@"userNick"];
  3. [man updateUserAccount:@"userNick" userid:@"userId"];

完成上述埋点后,您就可以在阿里云控制台看到相应统计信息,例如下图显示实时统计里的登录会员和新注册会员。

user stastics

4.2 页面埋点

使用ALBBMANPageHitHelper可以进行ViewController级别的页面埋点,ALBBMANPageHitHelper为页面埋点辅助类,可以自动完成页面名称(默认获取ViewController名称并去除后缀Controller)、来源页面和页面停留时间的统计,如需使用更为灵活的页面埋点方案,可使用ALBBMANPageHitBuilder页面打点基础类进行页面埋点,详情见4.3节。

【注意】:如果App中没有进行页面埋点,活跃用户参数不能正常统计。

4.2.1 页面进入

接口:

  1. - (void)pageAppear:(UIViewController *)pViewController;

功能: 记录页面进入时的一些状态信息,但不发送日志,和 pageDisappear 配合使用

入参: UIViewController 或者其子类指针

是否必须调用; 需要对页面埋点时调用

调用时机: viewDidAppear

备注: 必须和 pageDisappear 搭配使用

4.2.2 页面离开

接口:

  1. - (void)pageDisAppear:(UIViewController *)pViewController;

功能: 页面离开发送页面事件日志,和 pageAppear 配合使用

入参: UIViewController 或者其子类指针

是否必须调用: 当调用了 pageAppear 后,必须调用 pageDisappear

调用时机: viewDidDisAppear

备注: 必须和 pageAppear 搭配使用

4.2.3 设置页面扩展参数

接口:

  1. - (void)updatePageProperties:(UIViewController *)pViewController properties:(NSDictionary *)pProperties;

功能:设置页面扩展参数

是否必须调用:否

调用时机:调用pageDisAppear之前

4.2.4 代码示例

  1. // 进入页面
  2. [[ALBBMANPageHitHelper getInstance] pageAppear:self];
  3. // 设置页面事件扩展参数
  4. NSDictionary *properties = [NSDictionary dictionaryWithObject:@"pageValue" forKey:@"pageKey"];
  5. [[ALBBMANPageHitHelper getInstance] updatePageProperties:self properties:properties];
  6. // 离开页面
  7. [[ALBBMANPageHitHelper getInstance] pageDisAppear:self];

4.3 页面事件

ALBBMANPageHitBuilder 类也是用来产生页面事件日志的,虽然 4.2 节中可以通过 pageAppear 和 pageDisAppear 来进行页面埋点,但是它针对的只是 UIViewController 级别的页面,并不能满足一些场景的页面事件,例如 UIView,如果用户需要将一个UIView 当做一个页面,那么就可以通过 ALBBMANPageHitBuilder 来进行页面事件的埋点,即用户自己采集页面事件相关的信息(如页面的 refer、页面停留时间等),通过 ALBBMANPageBuilder 构造出一条页面事件的日志 map,最后通过某个 ALBBMANTracker 埋点实例的 send API发送上传。

ALBBMANTracker是一个用于对埋点数据进行上报的工具,下文提到的ALBBMANPageHitBuilder等事件类都是通过ALBBMANTracker进行事件件上报的。其中ALBBMANTracker的获取如下所示:

  1. // 获取默认ALBBMANTracker实例
  2. ALBBMANTracker *tracker = [[ALBBMANAnalytics getInstance] getDefaultTracker];

埋点数据上报都是通过ALBBMANTracker进行,我们可以设定/删除上报数据的全局字段,全局字段设定后在所有的上报日志中都可以查看,如下所示:

  1. ALBBMANTracker *tracker = [[ALBBMANAnalytics getInstance] getDefaultTracker];
  2. // 设定全局字段
  3. [tracker setGlobalProperty:@"globalKey1" value:@"globalValue1"];
  4. // 删除全局字段
  5. [tracker removeGlobalProperty:@"globalKey1"];

4.3.1 设置页面名称

接口:

  1. - (void)setPageName:(NSString *)pPageName;

功能: 设置页面名称

入参: 页面名称,pPageName不能为空

是否必须调用: 是,在已经创建了 ALBBMANPageHitBuilder 实例后,必须调用该方法

调用时机: 创建 ALBBMANPageHitBuilder 后,必须调用 setPageName,否则调用 build 后返回为 nil

备注: 页面名称是页面事件的基础,必须设置

4.3.2 设置页面 refer

接口:

  1. - (void)setReferPage:(NSString *)pReferPageName;

功能: 设置页面的 refer,即当前页面的来源页面

入参: refer 页面名称,refer 可以为空

是否必须调用: 否

4.3.3 设置页面停留时间

接口:

  1. - (void)setDurationOnPage:(long long)durationTimeOnPage;

功能: 记录页面从展现到页面离开的停留时间

入参: 页面停留时间

是否必须调用 否

调用时机: 需要记录当前页面停留时间

4.3.4 设置页面事件扩展参数

接口:

  1. - (void)setProperty:(NSString *)pKey value:(NSString *)pValue;

功能:给单条日志添加一个扩展参数

入参:key 和 value 都不能为 nil,其中 key 不能为PAGE/EVENTID/ARG1/ARG2/ARG3/ARGS,否则 build 返回 nil

是否必须调用:否

调用时机:需要给ALBBMANPageHitBuilder实例添加扩展参数时

4.3.5 组装单条日志 map

接口:

  1. - (NSDictionary *)build;

功能: 将塞入的参数组成 map 返回

入参: 无

是否必须调用: 否

调用时机: 创建 ALBBMANPageHitBuilder 或者 ALBBMANCustomHitBuilder 实例,塞入一些业务字段后,调用 build 组装业务字段生成日志 map,通过某个 ALBBMANTracker 埋点实例 send 接口发送

备注: build 函数返回的日志 map,必须通过ALBBMANTracker埋点上报工具的send接口上传数据完成打点

4.3.6 代码示例

  1. ALBBMANPageHitBuilder *pageHitBuilder = [[ALBBMANPageHitBuilder alloc] init];
  2. // 设置页面refer
  3. [pageHitBuilder setReferPage:@"pageRefer"];
  4. // 设置页面名称
  5. [pageHitBuilder setPageName:@"pageName"];
  6. // 设置页面停留时间
  7. [pageHitBuilder setDurationOnPage:100];
  8. // 设置页面事件扩展参数
  9. [pageHitBuilder setProperty:@"pagePropertyKey1" value:@"pagePropertyValue1"];
  10. [pageHitBuilder setProperty:@"pagePropertyKey2" value:@"pagePropertyValue2"];
  11. ALBBMANTracker *tracker = [[ALBBMANAnalytics getInstance] getDefaultTracker];
  12. // 组装日志并发送
  13. [tracker send:[pageHitBuilder build]];

上述的页面埋点与页面事件将影响控制台【页面路径分析】、【关键漏斗】、【控件点击】、【页面留存】等指标的报表展现,页面路径如下图所示。

page path


5. 性能数据统计

APP性能直接决定了用户体验效果,同时也一直是业务开发人员容易忽视的问题。Mobile Analytics提供了丰富的性能监控API方便用户全方位监控自己的APP运行状态。

5.1 网络性能统计

Mobile Analytics针对传统APP的网络性能统计进行了封装,方便用户“一键埋点”,获取网络层面的关键技术指标,这些指标包括:

  • 请求的整体响应时间
  • 网络异常统计

5.1.1 接口及统计

从客户端角度来看,一个正常的网络请求分为以下几个阶段:tcp建连、请求发送、开始接收响应数据、接受数据完成。分阶段性能指标有:TCP建连时间、首字节时间、整体的响应时间。那么针对这几个阶段,我们分别提供有对应的API接口。

  1. - (instancetype)initWithHost:(NSString *)host method:(NSString *)method;
  2. /*
  3. * 用户可以自行设置属性,但是不要包含“/Host/Method/EVENTID/PAGE/ARG1/ARG2/ARG3/ARGS/COMPRESS”
  4. */
  5. - (void)setProperty:(NSString *)pKey value:(NSString *)pValue;
  6. - (void)setproperties:(NSMutableDictionary *)properties;
  7. /*
  8. * 网络请求打点开始
  9. */
  10. - (void)requestStart;
  11. /*
  12. * 打点标记建连成功
  13. */
  14. - (void)connectFinished;
  15. /*
  16. * 打点标记首字节到达
  17. */
  18. - (void)requestFirstBytes;
  19. /*
  20. * 打点正常结束
  21. */
  22. - (void)requestEndWithBytes:(long)loadBytes;
  23. /*
  24. * 出错的时候上报
  25. */
  26. - (void)requestEndWithError:(ALBBMANNetworkError *)error;
  27. /*
  28. * 整合打点日志
  29. */
  30. - (NSDictionary *)build;

初始化ALBBMANNetworkHitBuilder的时候Host/Method是必须要的,如果传入Nil,数据将无法上报。下面是以NSURLConnection的实例:

  1. #import <AlicloudMobileAnalitics/ALBBMAN.h>
  2. /**
  3. * @brief
  4. 同步请求网络性能埋点
  5. */
  6. - (void)syncNetworkHit {
  7. NSURL *URL = [NSURL URLWithString:@"http://www.taobao.com/"];
  8. NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL
  9. cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
  10. timeoutInterval:30];
  11. // 由于NSURLConnection同步接口,封装了TCP连接、首字节的过程,所以同步接口上面我们统计不到TCP建连时间跟首字节时间
  12. ALBBMANNetworkHitBuilder *builder = [[ALBBMANNetworkHitBuilder alloc] initWithHost:URL.host method:[request HTTPMethod]];
  13. // 开始请求打点
  14. [builder requestStart];
  15. NSHTTPURLResponse *response;
  16. NSError *error;
  17. NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
  18. if (error) {
  19. // 自定义网络异常,见文档5.1.2
  20. ALBBMANNetworkError *networkError = [[ALBBMANNetworkError alloc] initWithErrorCode:1001];
  21. // 自定义网络异常附加信息
  22. [networkError setProperty:@"IP" value:@"1.2.3.4"];
  23. [builder requestEndWithError:networkError];
  24. }
  25. if (response.statusCode >= 400 && response.statusCode < 600) {
  26. // 默认网络异常,见文档5.1.2
  27. ALBBMANNetworkError *networkError;
  28. if (response.statusCode < 500) {
  29. networkError = [ALBBMANNetworkError ErrorWithHttpException4];
  30. } else {
  31. networkError = [ALBBMANNetworkError ErrorWithHttpException5];
  32. }
  33. // 默认网络异常附加信息
  34. [networkError setProperty:@"IP" value:@"1.2.3.4"];
  35. [builder requestEndWithError:networkError];
  36. }
  37. else {
  38. //结束请求打点,bytes是下载的数据量大小
  39. [builder requestEndWithBytes:data.length];
  40. }
  41. // 组装日志并发送
  42. ALBBMANTracker *tracker = [[ALBBMANAnalytics getInstance] getDefaultTracker];
  43. [tracker send:[builder build]];
  44. }
  45. // 异步接口,相对同步接口的情况下,可以多统计到首字节,其他跟同步接口一样
  46. - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
  47. // 首字节响应埋点
  48. [_builder requestFirstBytes];
  49. }
  50. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
  51. [_mutableData appendData:data];
  52. }
  53. - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
  54. // 结束请求打点
  55. [_builder requestEndWithBytes:_mutableData.length];
  56. // 组装日志并发送
  57. ALBBMANTracker *tracker = [[ALBBMANAnalytics getInstance] getDefaultTracker];
  58. [tracker send:[_builder build]];
  59. }
  60. - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
  61. ALBBMANNetworkError *networkError = [[ALBBMANNetworkError alloc] initWithErrorCode:[NSString stringWithFormat:@"%ld", (long)error.code]];
  62. [_builder requestEndWithError:networkError];
  63. // 组装日志并发送
  64. ALBBMANTracker *tracker = [[ALBBMANAnalytics getInstance] getDefaultTracker];
  65. [tracker send:[_builder build]];
  66. }
  67. //由于NSURLConnection封装性,已然看不到TCP连接过程,所以统计不到建连
  68. //时间,如果是自实现的Socket的情况下,可以额外在TCP连接成功的时刻调用如下代码,统计tcp建连时间
  69. [builder connectFinished];

注意,目前Method字段的value只支持POST和GET(不区分大小写)。

网络性能的地域分析如下图所示,

network region

5.1.2 异常统计

网络请求无法避免异常情况,在埋点时,如果抛出异常打断了整个网络请求的流程,那么您是需要对此做额外处理的,否则将导致打点数据紊乱。处理的办法也很简便,您只需要在抓获异常以后选择网络默认异常类型和自定义网络异常类型的任意一种方式来标记这次请求发生了异常:

默认网络异常类型

异常类型 对应接口 说明
400<=HttpResponseCode<500 ErrorWithHttpException4 Http状态码4XX的错误
500<=HttpResponseCode ErrorWithHttpException5 Http状态码5XX的错误
IO错误 ErrorWithIOInterrupted 请求的IO错误
Timeout错误 ErrorWithSocketTimeout 连接/请求超时的错误

请参考以上事例。

使用说明:

  1. ALBBMANNetworkError *networkError = [ALBBMANNetworkError ErrorWithHttpException4];
  2. // 网络异常附加信息
  3. [networkError setProperty:@"IP" value:@"1.2.3.4"];
  4. [builder requestEndWithError:networkError];

自定义网络异常类型

如果默认网络异常类型无法满足您的需求,您可以自定义网络异常类型,但是网络异常类型编码要在1001 <= YouErrorCode <= 1010范围内,如果不进行前端配置将以错误编码(10xx)的形式进行展示,如果在前端配置错误编码对应的信息,就会展示您所配置的信息。

异常类型 对应接口 说明
自定义错误 initWithErrorCode 默认网络错误不可描述时,可自定义

使用说明:

  1. ALBBMANNetworkError *networkError = [[ALBBMANNetworkError alloc] initWithErrorCode:1001];
  2. // 自定义网络异常附加信息
  3. [networkError setProperty:@"IP" value:@"1.2.3.4"];
  4. [builder requestEndWithError:networkError];

5.2 自定义性能事件埋点

自定义性能事件埋点可满足用户对定制化的性能事件进行实时监控的需求(比如,Cache的读写耗时,私有网络协议的RPC耗时,客户端算法的耗时等)。在进行正确的客户端埋点后,您可通过阿里云控制台进行数据的多维度实时监控。

自定义性能事件可包含以下几部分内容:

1.事件名称(event_label),只能为字母、数字和下划线组成【必选】

2.事件从开始到完成消耗的时长【必选】

3.事件所携带的属性【可选】

【注意】 自定义性能事件用于监控用户事件的时间开销,请参考下述代码实例正确传递参数。

例子:

  1. ALBBMANCustomPerformanceHitBuilder *customPerfBuilder = [[ALBBMANCustomPerformanceHitBuilder alloc] init:@"HomeActivityInit"];
  2. // 记录事件时间方式1,自定义性能事件开始
  3. [customPerfBuilder hitStart];
  4. ...
  5. // 自定义性能事件结束
  6. [customPerfBuilder hitEnd];
  7. // 设置定义性能事件持续时间,方式2
  8. // [customPerfBuilder setDurationIntervalInMillis:1234];
  9. // 设置扩展参数
  10. [customPerfBuilder setProperty:@"Page" value:@"Home"];
  11. // 组装日志并发送
  12. ALBBMANTracker *traker = [[ALBBMANAnalytics getInstance] getDefaultTracker];
  13. [traker send:[customPerfBuilder build]];

完成上述埋点后您可以在控制台【性能分析】中的【自定义性能事件】子页面进行自定义性能事件的实时监控,如下图所示。custom stastics

5.3 crashHandler

Mobile Analytics 初始化的时候默认会打开 crashHandler,即自动捕获应用 crash,然后发送 crash 日志事件。

【注意】如果您的程序中设置了crash捕获,您的crash捕获设置会和Mobile Analytics中的crashHandler相互覆盖,覆盖结果因两者运行的先后顺序的不同而异。

5.3.1 关闭 crashHandler

接口:

  1. - (void)turnOffCrashHandler;

功能: 关闭 Mobile Analytics 的自动捕获应用 crash

是否必须调用: 否

调用时机: 初始化SDK时调用


6. 自定义事件

自定义事件埋点可用于满足用户的定制化需求。

6.1 设置自定义事件的标签

接口:

  1. - (void)setEventLabel:(NSString *)pEventId;

功能: 区分不同自定义事件的标签,同一种自定义事件的 pEventId 相同

入参: 自定义事件标签,相当于自定义事件的业务 ID,不能为空

是否必须调用: 是

调用时机: 创建 ALBBMANCustomHitBuilder 后,必须调用 setEventLabel,否则调用 build 后返回为 nil

备注: 对于自定义事件,必须设置标签,pEventId需要事先在wdm上申请

6.2 设置自定义事件的页面名称

接口:

  1. - (void)setEventPage:(NSString *)pPageName;

功能: 设置该自定义事件发生在哪个页面

入参: 自定义事件的页面名称,可以为空,这种情况日志中默认页面名称为 “UT”

是否必须调用: 否

调用时机: 需要明确该自定义事件发生时的页面,不调用情况下默认为 “UT”

6.3 设置自定义事件停留时间

接口:

  1. - (void)setDurationOnEvent:(long long)durationOnEvent;

功能: 设置自定义事件持续时间,跟 ALBBMANPageHitBuilder 中的页面停留时间类似

入参: 自定义事件停留时间

是否必须调用: 否

调用时机: 需要记录自定义事件的停留时间

6.4 设置自定义事件扩展参数

接口:

  1. - (void)setProperty:(NSString *)pKey value:(NSString *)pValue;

功能:给单条日志添加一个扩展参数

入参:key 和 value 都不能为 nil,其中 key 不能为PAGE/EVENTID/ARG1/ARG2/ARG3/ARGS,否则 build 返回 nil

是否必须调用:否

调用时机:需要给ALBBMANCustomHitBuilder实例添加扩展参数时

6.5 代码示例

  1. ALBBMANCustomHitBuilder *customBuilder = [[ALBBMANCustomHitBuilder alloc] init];
  2. // 设置自定义事件标签
  3. [customBuilder setEventLabel:@"test_event_label"];
  4. // 设置自定义事件页面名称
  5. [customBuilder setEventPage:@"test_Page"];
  6. // 设置自定义事件持续时间
  7. [customBuilder setDurationOnEvent:12345];
  8. // 设置自定义事件扩展参数
  9. [customBuilder setProperty:@"ckey0" value:@"value0"];
  10. [customBuilder setProperty:@"ckey1" value:@"value1"];
  11. [customBuilder setProperty:@"ckey2" value:@"value2"];
  12. ALBBMANTracker *traker = [[ALBBMANAnalytics getInstance] getDefaultTracker];
  13. // 组装日志并发送
  14. NSDictionary *dic = [customBuilder build];
  15. [traker send:dic];

自定义事件扩展参数在控制台【自定义事件】-【详细数据】-【参数分析】中可查看,但查看之前请在【管理设置】-【自定义事件管理】中添加要在控制台显示的事件ID。 如果您需要对自定义事件进行实时监控,请参考【5.3 自定义性能事件】章节。

7. 如何实时验证数据是否正常上报

您当前可以通过以下两种方式进行验证:

  • 打开移动数据分析log,查看是否会出现如***** UTMCEngine <info> ***** UTMCUploader:upload :: upload response:{"t":1464532326870,"ret":"","success":"success"}的日志;

    注意:SDK的日志上报会有缓存和聚合,因此上报时机会比API调用时机滞后一些,可耐心等待30-60s或将应用切到后台查看。

  • 登录控制台查看活跃用户等实时报表;

    注意:活跃用户的统计依赖页面埋点,移动数据分析后台会将零星的页面埋点处理为噪点,进行过滤,因此请确保您有足量的页面埋点事件上报(>5),另外控制台的实时报表大概会有5min的延迟。

8. H5页面数据的采集

H5页面采集并没有单独的SDK,依赖native进行上传,通过JSBridge通知给native,然后调用MAN的相应方法,进行数据的上报。可运行demo请参考:alicloud-ios-demo

8.1 代码示例

H5进行自定义事件的上报:

JavaScript代码:

  1. // 通过iframe发起请求,然后在native端进行捕获。
  2. var iframe = document.createElement("IFRAME");
  3. // 通过自定义scheme,来判断是正常请求还是H5通信。
  4. // 参数可以放在url中,然后在native解析。
  5. iframe.setAttribute("src", "jsbridge://custom");
  6. document.documentElement.appendChild(iframe);
  7. iframe.parentNode.removeChild(iframe);
  8. iframe = null;

Objective-c

  1. - (BOOL) webView:(UIWebView *)webView
  2. shouldStartLoadWithRequest:(NSURLRequest *)request
  3. navigationType:(UIWebViewNavigationType)navigationType
  4. {
  5. NSURL *url = [request URL];
  6. NSString *scheme = [url scheme];
  7. // js通信
  8. if ( [@"jsbridge" isEqualToString:scheme] ) {
  9. if ( [@"custom" isEqualToString:url.host] ) {
  10. ALBBMANCustomHitBuilder *customBuilder = [[ALBBMANCustomHitBuilder alloc] init];
  11. // 设置自定义事件标签
  12. [customBuilder setEventLabel:@"test_event_label"];
  13. // 设置自定义事件页面名称
  14. [customBuilder setEventPage:@"test_Page"];
  15. // 设置自定义事件持续时间
  16. [customBuilder setDurationOnEvent:12345];
  17. // 设置自定义事件扩展参数
  18. [customBuilder setProperty:@"ckey0" value:@"value0"];
  19. [customBuilder setProperty:@"ckey1" value:@"value1"];
  20. [customBuilder setProperty:@"ckey2" value:@"value2"];
  21. ALBBMANTracker *traker = [[ALBBMANAnalytics getInstance] getDefaultTracker];
  22. // 组装日志并发送
  23. NSDictionary *dic = [customBuilder build];
  24. [traker send:dic];
  25. }
  26. return NO;
  27. }
  28. return YES;
  29. }
本文导读目录