zoukankan      html  css  js  c++  java
  • Hook 无侵入式埋点(页面统计)

    一、技术原理

    Method-Swizzling 黑魔法 方法交换(不懂的可以查)

    二、页面统计

    某盟页面统计SDK需要开发者在APP基类里实现ViewDidAppear和viewDidDisappear方法,或者在某个特定的类实现以上俩方法。下面采用无侵入式埋点实现页面统计,无需APP开发者实现以上俩方法,适用于开发SDK的公司,无感知采集APP信息。

    三、代码实现

    #import <UIKit/UIKit.h>

     

    @interface UIViewController (FRHook)

     

    @end

    #import "UIViewController+FRHook.h"

    #import <objc/runtime.h>

    @implementation UIViewController (FRHook)

    +(void)load{

        

        Method appearMethod = class_getInstanceMethod([self class], @selector(viewDidAppear:));

        Method hookAppearMethod = class_getInstanceMethod([self class], @selector(hook_ViewDidAppear:));

        method_exchangeImplementations(appearMethod, hookAppearMethod);

        

        Method disappearMethod = class_getInstanceMethod([self class], @selector(viewDidDisappear:));

        Method hookDisappearMethod = class_getInstanceMethod([self class], @selector(hook_viewDidDisappear:));

        method_exchangeImplementations(disappearMethod, hookDisappearMethod);

    }

    - (void)hook_ViewDidAppear:(BOOL)animated

    {

        [self hook_ViewDidAppear:animated];

        if (![self isKindOfClass:[UINavigationController class]]&&![self isKindOfClass:[UITabBarController class]]) {

            NSString *appearDetailInfo = [NSString stringWithFormat:@" %@ - %@ - %@", NSStringFromClass([self class]),self.navigationItem.title, @"didAppear"];

    //        NSLog(@"%@", appearDetailInfo);

            //上传到服务器

        }

    }

     

    - (void)hook_viewDidDisappear:(BOOL)animated

    {

        [self hook_viewDidDisappear:animated];

        if (![self isKindOfClass:[UINavigationController class]]&&![self isKindOfClass:[UITabBarController class]]) {

            NSString *disappearDetailInfo = [NSString stringWithFormat:@" %@ - %@ - %@", NSStringFromClass([self class]),self.navigationItem.title, @"didDisappear"];

    //        NSLog(@"%@", disappearDetailInfo);

            //上传到服务器

        }

    }

    四、举一反三

    怎么采集用户的的触摸信息?

  • 相关阅读:
    解释机器学习模型的一些方法(一)——数据可视化
    机器学习模型解释工具-Lime
    Hive SQL 语法学习与实践
    LeetCode 198. 打家劫舍(House Robber)LeetCode 213. 打家劫舍 II(House Robber II)
    LeetCode 148. 排序链表(Sort List)
    LeetCode 18. 四数之和(4Sum)
    LeetCode 12. 整数转罗马数字(Integer to Roman)
    LeetCode 31. 下一个排列(Next Permutation)
    LeetCode 168. Excel表列名称(Excel Sheet Column Title)
    论FPGA建模,与面向对象编程的相似性
  • 原文地址:https://www.cnblogs.com/huangzs/p/8670451.html
Copyright © 2011-2022 走看看