使用
启动配置
启动上报功能
在 AppDelegate
的 -application:didFinishLaunchingWithOptions:
中启动移动分析 TMFAnalyse
。
- (void)prepareAnalyseWithShark:(TMFSharkCenter *)shark {
[TMFAnalyseManager setLogLevels:TMFAnalyseLogLevelAll];
TMFAnalyseManager *alyManager = [TMFAnalyseManager shareManager];
/// config
alyManager.config.autoTrack = YES;
[alyManager activate];
}
配置项目
- TMFAnalyseConfig
配置项目 | 参数值 | 参数说明 |
---|---|---|
autoTrack | BOOL | 是否开启自动埋点,默认NO |
autoTrackOptions | TMFAnalyseAutoTrackOptions | 自动埋点策略,默认TMFAnalyseAutoTrackOptionAll |
cacheReportNotification | BOOL | 是否开启缓存上报通知,默认 NO |
commonReportNotification | BOOL | 是否开启普通上报通知,默认 NO |
1)cacheReportNotification
事件上报失败会被缓存至本地数据库。当满足条件时,SDK会将之前上报失败的事件进行重新上报。开启cacheReportNotification
会在上报成功后进行NSNotificationCenter
通知。
2)commonReportNotification
非缓存事件上报时,开启commonReportNotification
会在上报成功后进行NSNotificationCenter
通知。
- TMFAnalyseAutoTrackOptions
枚举值 | 说明 |
---|---|
TMFAnalyseAutoTrackOptionAPPStart | 启动 App 或从后台切换进入 App 时触发 |
TMFAnalyseAutoTrackOptionAPPEnd | 退出 App 或 App进入后台时触发 |
TMFAnalyseAutoTrackOptionPage | 浏览一个 ViewController 页面时触发 |
TMFAnalyseAutoTrackOptionAll | 所有事件 |
上报参数
TMFAnalyseArea
如果希望上报事件时携带位置信息,可以创建
TMFAnalyseArea
对象赋值给TMFAnalyseManager
。
属性 | 类型 | 说明 |
---|---|---|
country | NSString | 国家、地区信息 |
province | NSString | 省份信息 |
city | NSString | 城市信息 |
userID
如果希望上报事件时携带用户信息,可以赋值
TMFAnalyseManager
的userID
。
上报事件
事件定义
TMFAnalyseEventItem
事件必须封装成一个
TMFAnalyseEventItem
对象来进行上报。事件的属性信息被放在props
属性中,他可以是任意一个遵守TMFAnalyseEventItemCoding
协议的对象。
属性 | 类型 | 说明 |
---|---|---|
uuid | NSString | 事件UUID,防重 |
time | long long | 客户端时间戳,精确到秒 |
props | id |
事件属性 |
TMFAnalyseEventItemCoding
TMFAnalyseEventItemCoding
协议定义了事件需要包含的属性。它可以分为两部分,时间标识和属性信息。- eventID;
返回事件的唯一标识符,它是不可重复的。- eventName;
用来指定事件名称。- (int)eventId; - (NSString *)eventName; - (NSDictionary<NSString *, id<NSCoding>> *)properties;
预置事件
TMFAnalyseManager提供了一些已经定义好的事件,包括App启动,页面加载等事件。通过开启自动埋点功能后,这些事件会被自动采集。
TMFAnalyseEventApplicationStart
应用启动事件
属性 | 类型 | 说明 |
---|---|---|
sessionID | NSString | TMFAnalyseManager的sessionID,用来标记一次应用周期 |
TMFAnalyseEventApplicationEnd
应用关闭、进入后台事件
属性 | 类型 | 说明 |
---|---|---|
time | NSInteger | 应用使用时长(秒) |
stime | NSInteger | 应用打开时间戳(秒) |
sessionID | NSString | TMFAnalyseManager的sessionID,用来标记一次应用周期 |
TMFAnalyseEventPage
页面浏览事件
属性 | 类型 | 说明 |
---|---|---|
page | NSString | 页面名称 |
prevPage | NSString | 上级页面名称 |
time | NSInteger | 停留时长(秒) |
stime | NSInteger | 页面打开时间戳(秒) |
sessionID | NSString | TMFAnalyseManager的sessionID,用来标记一次应用周期 |
TMFAnalyseEventLogin
登录、登出事件
属性 | 类型 | 说明 |
---|---|---|
sessionID | NSString | TMFAnalyseManager的sessionID,用来标记一次应用周期 |
事件上报
上报通用事件
上报API
- (void)reportEvent:(TMFAnalyseEventItem *)eventItem; - (void)reportEvent:(TMFAnalyseEventItem *)eventItem completion:(_Nullable TMFAnalyseEventReportCompletion)completion; - (void)reportEvent:(NSInteger)eventId property:(NSDictionary *)property completion:(_Nullable TMFAnalyseEventReportCompletion)completion; /// 批量上报 - (void)reportEvents:(NSArray<TMFAnalyseEventItem *> *)eventItems; - (void)reportEvents:(NSArray<TMFAnalyseEventItem *> *)eventItems completion:(_Nullable TMFAnalyseEventReportCompletion)completion;
上报示例
// 1.创建页面浏览事件 TMFAnalyseEventPage *ePage = [[TMFAnalyseEventPage alloc] init]; ePage.page = @"个人信息"]; ePage.prevPage = @"首页"; ePage.time = 233; ePage.stime = /*页面打开时间*/; ePage.sessionID = [TMFAnalyseManager shareManager].analyseSessionID; // 2.创建上报事件 TMFAnalyseEventItem *event = [[TMFAnalyseEventItem alloc] init]; event.props = ePage; // 3.上报 [[TMFAnalyseManager shareManager] reportEvent:event];
上报示例2
// 指定 event id 进行上报 [[TMFAnalyseManager shareManager] reportEvent:123 property:@{@"param1":@"value"} completion:^(NSError * _Nullable error, NSString * _Nullable eventUUID) { // 事件回调 }];
上报登录或登出事件
上报API
- (void)reportLoginEvent:(NSString *)userID completion:(_Nullable TMFAnalyseEventReportCompletion)completion; - (void)reportPageEvent:(TMFAnalyseEventPage *)pageEvent completion:(_Nullable TMFAnalyseEventReportCompletion)completion;
上报示例
// userID 为 nil 表示登出事件 [[TMFAnalyseManager shareManager] reportLoginEvent:@"用户ID" completion:^(NSError * _Nullable error, NSString * _Nullable eventUUID) { NSLog(@"%@, %@", error, eventUUID); }];
上报回调
typedef void(^TMFAnalyseEventReportCompletion)(NSError * _Nullable error,NSString * _Nullable eventUUID);
参数 | 类型 | 说明 |
---|---|---|
error | NSError | 错误信息,可能为空 |
eventUUID | NSString | 上报事件标识 |
页面自动埋点
当开启页面自动埋点时,TMFAnalyseManager
会自动记录页面事件并上报。TMFAnalyseManager
通过Hook UIViewController
的生命周期事件发送通知来执行自动埋点。
- TMFUIViewControllerViewDidLoadNotification
- TMFUIViewControllerViewDidAppearNotification
- TMFUIViewControllerViewWillDisappearNotification
- TMFUIViewControllerViewDidDisappearNotification
自动埋点参数处理
基于Objective-C 优秀的运行时机制,TMFAnalyseManager
为UIViewController
增加了页面信息“属性”。
属性 | 类型 | 说明 |
---|---|---|
tmfPage | NSString | 页面信息,将会展示在数据统计报表上。默认使用ClassName。 |
通过手动设置该属性,能让数据统计报表上更加美观。
自动埋点页面选择
- 页面自动埋点不会上报
UITabBarController
及其子类。 - 页面自动埋点不会上报
UINavigationController
及其子类。 - 页面自动埋点不会上报某些弹出页面,包括:
- UIAlertController
- _UIAlertControllerTextFieldViewController
- 页面自动埋点不会上报键盘相关页面,包括:
- UIInputWindowController
- UISystemKeyboardDockController
- UISystemInputAssistantViewController
- UICompatibilityInputViewController
- UIPredictionViewController
日志
下面是配置组件日志的示例:
// TMFBaseCoreLogLevels
[TMFAnalyseManager setLogLevels:TMFBaseCoreLogLevelAll];
下面是只输出警告+错误的日志配置示例:
// TMFBaseCoreLogLevels
[TMFAnalyseManager setLogLevels:(TMFBaseCoreLogLevelWarn | TMFBaseCoreLogLevelError)];