iOS 开发技巧iOS实践iOS开发技术

iOS用户行为统计工具开发-无侵入埋点

2017-08-02  本文已影响590人  Mister志伟

用户行为统计(User Behavior Statistics, UBS)一直是移动互联网产品中必不可少的环节,也俗称埋点。其实现在用户统计的三方SDK很多,那为什么还要自己做呢?主要原因是自己做定制化程度高,灵活性大,而且统计数据不会外露。

近期被要求通过配置的方法进行用户行为统计,而不要将大量代码添加到统计的页面或者功能中,以此便于统一使用统计工具。

针对该需求笔者基于Aspects库开发了可通过配置方式进行集成的用户行为统计工具。
iOS用户行为统计工具说明

用户行为统计包含功能有:

  1. 统计用户打开、退出APP应用时刻,使用应用的时长;
  2. 统计用户打开页面的时刻,停留的时长;
  3. 统计用户使用的功能及使用时刻;
  4. 统计奔溃日志,奔溃时刻;
  5. 所有统计都通过配置的方式实现,除统计UITabBarViewController的子控制器切换外,不需要在统计类中添加代码(统计UITabBarViewController的子控制器切换时需实现其代理方法- (void)tabBarController:(UITabBarController*)tabBarController didSelectViewController:(UIViewController *)viewController;并需要在配置文件中添加实现其代理的类)并且可高度定制和可控。

注:以上统计均可包含用户信息、硬件信息和其他需要包含的固定信息。

  1. 添加统计配置


    图片 1.png

    如图1:

    trackedPages为普通页面统计,className为统计的页面的控制器类名称,pageName为该页面的汉语名称用于提交给后台作为统计名称使用;

    trackedEvents为功能使用统计,如按钮点击,手势执行等,className为统计功能的执行类名称(注:如UIButton的执行者类为其添加执行方法中的Target对象的类,通俗的讲就是它的点击方法在哪个类里实现的该类就是它的执行类),selector为统计功能的统计执行方法,eventName为统计功能的汉语名称用于提交后台作为统计名称使用;

    trackedTabBarEvents为UITabBarViewController的代理执行统计,className为执行其代理的类,该类需要执行其代理方法- (void)tabBarController:(UITabBarController*)tabBarController didSelectViewController:(UIViewController *)viewController;

    trackedTabBarSubVCEvent为UITabBarViewController的子控制器切换统计,item填写的顺序与实际添加子控制器顺序相同,item中className为子控制器类名称,pageName为该页面的汉语名称用于提交给后台作为统计名称使用。

  2. 初始化统计类
    在程序启动时初始化统计类,调用方法如下图,需要修改初始化配置时可查看API根据使用需求配置。


    图片 2.png
  3. 需要统计UITabBarViewController子控制器切换时的代理实现
    需要统计UITabBarViewController子控制器切换时需要在设置UITabBarViewController对象的时候实现其代理方法- (void)tabBarController:(UITabBarController*)tabBarController didSelectViewController:(UIViewController *)viewController;并在配置文件中添加实现类的配置,添加操作可查看使用说明中第一条添加统计配置。

参考文档

iOS 用户行为统计代码的剥离
禅与 Objective-C 编程艺术
Demo地址
Demo引用.a库地址GitHub给个Star噢!

- (void) webView: (WKWebView *) webView decidePolicyForNavigationAction: (WKNavigationAction*) navigationAction decisionHandler: (void (^)(WKNavigationActionPolicy)) decisionHandler{
       NSURL* url = [navigationAction.request URL] 
}

或者UIWebView的代理方法

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
       NSURL *url = [request URL];
}

,停留时间和原生界面逻辑基本相同。动作统计可以在javascript与webView之间定一个协议约定:document.location = "eventStatistic://"+"functionMethod"+"thisFunctionName",同样在上述两个方法中拦截URL中包含eventStatistic://前缀的即可,后边的方法名就可以截取作为上传服务器使用。
喜欢就点个赞呗!
欢迎大家提出更好的改进意见和建议,一起进步!

上一篇下一篇

猜你喜欢

热点阅读