【iOS开发】关于iOS统计埋点

对于一个移动App来说,统计用户的使用习惯已经是一个最基本的需求了。本文要讲的不是教你如何去实现一个统计模块,毕竟大部分的公司不会自己去开发一套统计系统。这里要讲的是如何方便优雅的集成第三方的统计系统,如:友盟等。

一般的埋点都是每个要统计的地方都加一句埋点代码,你刚毕业的时候这么写没有问题,但是如果你做了几年的软件开发,还这样写,那就是你的错了。这样分散的代码,不易于修改,不易于维护,还不易于测试。删除添加什么的,都很麻烦。

所以,做为一个有点经验的开发,我们应该要想有没有其它的方法来实现。一般的埋点就是在方法的开头或者结尾插入一句统计的代码。它不影响方法的运行。基于这样的要求。自然而然的就会想到,这是对方法进行AOP了。在iOS里面可以通过runtime来实现。也有一些很成熟的第三方库,像Aspects,](https://github.com/steipete/Aspects) 下面的例子就是通过Aspects将埋点代码进行统一。

Aspects 给NSObject类添加了一个分类来做AOP:

+ (id)aspect_hookSelector:(SEL)selector withOptions:(AspectOptions)options usingBlock:(id)block error:(NSError **)error;

假设我们有一个UserViewController,我们要统计它的打开次数,可以这样写:

[UserViewController aspect_hookSelector:@selector(viewWillAppear:) withOptions:AspectPositionAfter usingBlock:^(id aspectInfo, NSString *code) {
        // 这里写友盟的统计代码

    } error:nil];

上面这句代码是跟UserViewController的实例无关的,所以,我们可以把这句代码抽离到一个新的类中。

#import "UmengHelper.h"

@implementation UmengHelper

+ (void)statistics {
    [UserViewController aspect_hookSelector:@selector(viewWillAppear:) withOptions:AspectPositionAfter usingBlock:^(id aspectInfo) {
        // 这里写友盟的统计代码
    } error:nil];
    
    [UserViewController aspect_hookSelector:@selector(addFriend:) withOptions:AspectPositionAfter usingBlock:^(id aspectInfo) {
        // 这里写友盟的统计代码
    } error:nil];
}

@end

上面这样写,把所有要埋点的地方都写到同一个文件中了。但是有一个问题,这个新的类要引入所有用到的类。想一想这也是可以继续优化的。类名用字符串的形式保存,通过runtime得到对应的类。再调hook方法就解决了。

再进一步想一下,既然类名跟方法名都是一个字符串,那么这些字符串是不是可以保存到后台,通过接口下发。这样就实现了动态埋点。

但是产品经理是不会让我们这么舒服的,他肯定又会有这样的需求,『打开这个商品详情的时候要统计这个商品的名称』,Aspects也是支持参数传递的,通过那个usingBlock。

学了几年iOS,现在工作中偶尔写一点iOS相关的经验文章。Objective-C,Swift,RxSwift等。欢迎查看往期文章,喜欢的可以点个关注。

文章来源于互联网:【iOS开发】关于iOS统计埋点

阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=15829,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?