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);

            //上传到服务器

        }

    }

    四、举一反三

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

  • 相关阅读:
    面向对象
    面向对象
    面向对象
    面向对象
    面向对象
    面向对象
    面向对象
    面向对象
    3.1
    面向对象
  • 原文地址:https://www.cnblogs.com/huangzs/p/8670451.html
Copyright © 2011-2022 走看看