埋点

作者: 冰雨9527 | 来源:发表于2021-08-13 11:00 被阅读0次

目前,iOS 开发中常见的埋点方式,主要包括代码埋点、可视化埋点和无埋点这三种。
我们都知道,在 iOS 开发中最常见的三种埋点,就是对页面进入次数、页面停留时间、点击事件的埋点。


页面进入次数、页面停留时间都需要对 UIViewController 生命周期进行埋点,你可以创建一个 UIViewController 的 Category,代码如下:

@implementation UIViewController (logger)
+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // 通过 @selector 获得被替换和替换方法的 SEL,作为 SMHook:hookClass:fromeSelector:toSelector 的参数传入
        SEL fromSelectorAppear = @selector(viewWillAppear:);
        SEL toSelectorAppear = @selector(hook_viewWillAppear:);
        [SMHook hookClass:self fromSelector:fromSelectorAppear toSelector:toSelectorAppear];
        
        SEL fromSelectorDisappear = @selector(viewWillDisappear:);
        SEL toSelectorDisappear = @selector(hook_viewWillDisappear:);
        
        [SMHook hookClass:self fromSelector:fromSelectorDisappear toSelector:toSelectorDisappear];
    });
}
 
- (void)hook_viewWillAppear:(BOOL)animated {
    // 先执行插入代码,再执行原 viewWillAppear 方法
    [self insertToViewWillAppear];
    [self hook_viewWillAppear:animated];
}
- (void)hook_viewWillDisappear:(BOOL)animated {
    // 执行插入代码,再执行原 viewWillDisappear 方法
    [self insertToViewWillDisappear];
    [self hook_viewWillDisappear:animated];
}
 
- (void)insertToViewWillAppear {
    // 在 ViewWillAppear 时进行日志的埋点
    [[[[SMLogger create]
       message:[NSString stringWithFormat:@"%@ Appear",NSStringFromClass([self class])]]
      classify:ProjectClassifyOperation]
     save];
}
- (void)insertToViewWillDisappear {
    // 在 ViewWillDisappear 时进行日志的埋点
    [[[[SMLogger create]
       message:[NSString stringWithFormat:@"%@ Disappear",NSStringFromClass([self class])]]
      classify:ProjectClassifyOperation]
     save];
}
@end

对于点击事件来说,我们也可以通过运行时方法替换的方式进行无侵入埋点。这里最主要的工作是,找到这个点击事件的方法 sendAction:to:forEvent:,然后在 +load() 方法使用 SMHook 替换成为你定义的方法。完整代码实现如下:

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // 通过 @selector 获得被替换和替换方法的 SEL,作为 SMHook:hookClass:fromeSelector:toSelector 的参数传入
        SEL fromSelector = @selector(sendAction:to:forEvent:);
        SEL toSelector = @selector(hook_sendAction:to:forEvent:);
        [SMHook hookClass:self fromSelector:fromSelector toSelector:toSelector];
    });
}
 
- (void)hook_sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event {
    [self insertToSendAction:action to:target forEvent:event];
    [self hook_sendAction:action to:target forEvent:event];
}
- (void)insertToSendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event {
    // 日志记录
    if ([[[event allTouches] anyObject] phase] == UITouchPhaseEnded) {
        NSString *actionString = NSStringFromSelector(action);
        NSString *targetName = NSStringFromClass([target class]);
        [[[SMLogger create] message:[NSString stringWithFormat:@"%@ %@",targetName,actionString]] save];
    }
}

事件唯一标识


相关文章

  • 【用户行为采集】(一)常见埋点方式及对比

    常见的埋点方式主要有三种:代码埋点、全埋点、可视化埋点。 代码埋点 代码埋点是最经典埋点方式,实施埋点的研发将埋点...

  • iOS全埋点实践

    客户端埋点大概分为三类: 代码埋点 可视化埋点 无埋点 1、代码埋点 代码埋点,即在需要埋点的节点调用接口直接上传...

  • 埋点

    埋点分为客户端埋点和服务端埋点。客户端埋点通过restful api请求json数据写入kafka中,可以单条请求...

  • 埋点

    之前看了活跃用户的分析,那么活跃用户数和一些转化率是怎么来的呢?通过埋点,我们可以得到一些数据。 埋点是什么: 在...

  • 埋点

    如何进⾏埋点 埋点原理 对基于⽤户⾏为的数据平台来说,发⽣在⽤户界⾯的,能获取⽤户信息的触点就是⽤户数据的直接来源...

  • 埋点

    埋点:runtime运行时 hook方法viewwillappear viewwilldisappear sen...

  • 埋点

    注册一家统计网站 百度统计tongji.baidu.com(注意不是移动统计) 友盟u-webweb.umeng....

  • 埋点

    参考资料: “埋点”到底要不要?——源自数据采集的痛苦、幻想与失望 正文 1.埋点的方式多种多样,按照埋点位置的不...

  • 埋点

    一、概念 1.埋点 埋点分析,是网站分析的一种常用的数据采集方法,简单来说,就是在应用中添加监控点。 2.目的 获...

  • 埋点

    目前,iOS 开发中常见的埋点方式,主要包括代码埋点、可视化埋点和无埋点这三种。我们都知道,在 iOS 开发中最常...

网友评论

      本文标题:埋点

      本文链接:https://www.haomeiwen.com/subject/grbcbltx.html