DTTracker 是袋鼠云官方 iOS 数据埋点 SDK。
DTTracker 支持使用 CocoaPods、Carthage 和手工引入。
克隆本仓库到本地,直接将 DTTracker.framework 拖拽到工程目录下,同时添加 libsqlite3 和 libz.1.2.5
支持 iOS 8.0 及以上版本
#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