DTTracker 是袋鼠云官方iOS数据埋点SDK
- 注册袋鼠云云日志帐号
- 创建上传接口及token信息
- 安装DTTracker SDK,并使用上传接口及token初始化
DTTracker 支持使用CocoaPods、Carthage和手工引入。
DTTracker 支持使用CocoaPods引入:
pod 'DTTracker'
DTTracker 支持使用Carthage引入:
github "liuyunclouder/DTTracker"
克隆本仓库到本地,直接拖拽DTTracker.framework到工程目录下,同时添加libsqlite3和libz.1.2.5
支持iOS 8.0及以上版本
- 登录后进入 https://log.dtstack.com/upload.html#/http
- 根据指示选择解析规则(解析规则列表允许自定义规则),填写appname和tag,保存好填写的appname,这就是后续初始化时需要的token,点击下一步
- 选择接口的协议类型,建议选择https,这样更好地保护您的数据安全,然后复制接口并保存
#import <DTTracker/DTTracker.h>
DTTrackManager *trackMangar = [DTTrackManager sharedInstanceWithServerURL:@"your_upload_url" token:@"your_app_token" debugMode:DTTrackerDebugAndTrack];
your_upload_url为步骤3中的接口地址,your_app_token为步骤2中的appname,发布时debugMode一定要设置为DTTrackerDebugOff。
/**
运行模式
*/
typedef NS_ENUM(NSInteger, DTTrackerDebugMode) {
/** 关闭DEBUG模式,线上环境使用 */
DTTrackerDebugOff,
/** DEBUG模式,但该模式下发送的数据仅用于调试,不进行数据导入 */
DTTrackerDebugOnly,
/** DEBUG模式,并将数据导入到云日志中 */
DTTrackerDebugAndTrack
};
埋点记录会根据记录条数和时间选择性上传,同时也会在APP进入后台时执行上传任务,在不影响用户体验的同时尽量保证数据的实时性。
[[DTTrackManager sharedInstance] trackEvent:@"test plain track" withProperties:@{ @"k1":@"v1"}];
NSString *transactionID = [[DTTrackManager sharedInstance] trackTransactionBeginWithEvent:@"test transaction track" withProperties:@{
@"test": @"y"
}];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[[DTTrackManager sharedInstance] trackCommitWithTransactionID: transactionID];
});
会在APP启动和进入后台,以及页面载入和退出时,自动生成埋点记录,见 DTAutoTrackProtocol。
trackMangar.autoTrack = YES;
如果设置了trackCrash为YES,DTTracker会把崩溃堆栈信息也记录下来。
trackMangar.trackCrash = YES;
self.btn.dt_eventInfo = @{
@"event": @"btn clicked",
@"bus": @"311"
};
如果同时使用我们的JS SDK,需要在以下两个方法里添加几行代码,方便Native和H5通信。
UIWebView:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if ([[DTTrackManager sharedInstance] shouldInterceptRequest:request inWebView:webView withProperties:nil]) {
return NO;
}
return YES;
}
WKWebView:
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
if ([[DTTrackManager sharedInstance] shouldInterceptRequest:navigationAction.request inWebView:webView withProperties:nil]) {
decisionHandler(WKNavigationActionPolicyCancel);
return;
}
decisionHandler(WKNavigationActionPolicyAllow);
}
MIT