iOS全埋点AutoTrack
文章平均质量分 94
1、数据采集SDK解决方案
2、采集页面浏览事件、控件点击事件、崩溃信息及手势采集
3、用户标识、时间相关、数据存储、数据同步、AppExtension、App与H5打通、React Native全埋点。
iOS逆向
华为云云享专家认证|阿里云开发社区博客专家,定期分享Java、iOS资讯(包括基础知识储备)、小程序开发与运营、阅读与写作。只为你呈现有价值的信息,专注于移动端技术研究领域。
展开
-
实现React Native中Button控件AppClick事件的全埋点
前言I 、 SensorsAnalyticsSDK (ReactNative)#pragma mark - ReactNative@implementation SensorsAnalyticsSDK (ReactNative)/*** 交换两个方法的实现** @param className 需要交换的类名称* @param methodName1 被交换的方法名,即原始的方法* @param methodName2 交换后的方法名,即新的实现方法* @param method2IM原创 2020-08-18 16:37:34 · 10884 阅读 · 0 评论 -
【 iOS App Extension 代码埋点】将事件数据保存在共享资源中。容器应用每次启动的时候,都会尝试从共享资源中读取事件数据,然后进行二次加工并保存到本地,然后在合适的时机进行数据同步。
前言在应用程序扩展内采集各种事件信息虽然我们也可以实现全埋点,但并不建议这样做,这样不仅会增加应用程序扩展的逻辑复杂度,还会导致应用程序扩展的包体积增加。因此,应程程序扩展一般是采用代码埋点,然后将事件数据保存在共享资源中。容器应用每次启动的时候,都会尝试从共享资源中读取事件数据,然后进行二次加工并保存到本地,然后在合适的时机进行数据同步。I、应用程序扩展相关的事件采集在SensorsSDK中创建SensorsAnalyticsExtensionDataManager类,该类主要负责实现和应用程序原创 2020-08-18 16:03:09 · 11023 阅读 · 0 评论 -
iOS小技能:iOS与H5打通进行数据传输
前言H5触发的事件不直接同步给服务端,而是先发给App端的数据采集SDK,经App端数据采集SDK二次加工处理后存入本地缓存再进行同步。App与H5打通原因.数据准确性: H5无法直接获取设备的相关信息,只能通过解析UserAgent值获取有限的信息,而解析UserAgent值,有些信息通过解析UserAgent值根本获取不到,比如应用程序的版本号等。用户标识:(iOS应用程序一般使用IDFA或IDFV,H5一般使用Cookie)App与H5打通的方案·通过拦截WebView请求进行打通。原创 2020-08-18 14:50:03 · 11507 阅读 · 0 评论 -
iOS全埋点:【数据同步策略】(1、客户端本地已缓存的数据超过一定条数时同步数据、2、客户端每隔一定的时间同步一次3、应用程序进入后台时尝试同步本地已缓存的所有数据。)
前言基本原则策略一:客户端本地已缓存的事件超过一定条数时同步数据(比如:100条)。策略二:客户端每隔一定的时间同步一次(比如,每隔15秒同步一次)。策略三:应用程序进入后台时尝试同步本地已缓存的所有数据。I、按照事件触发的时间先后顺序同步数据1.1 新增SensorsAnalyticsSDK的-flush方法,并使其在队列里执行添加一个dispatch_queue_t类型的属性serialQueue/** 按照事件触发的时间先后顺序同步数据 */@property (n原创 2020-08-18 12:03:24 · 10905 阅读 · 0 评论 -
iOS手势全埋点:轻拍手势、长按手势、捏合手势、旋转手势、轻扫手势、平移手势、屏幕边缘平移手势
前言手势识别器必须被添加在一个特定的视图上(比如UILabel、UIImageView等控件),这需要通过调用UIView类中的-addGestureRecognizer:方法进行添加。手势识别器也使用了Target-Action设计模式。当我们为一个手势识别器添加一个或多个Target-Action后,在视图上进行触摸操作时,一旦系统识别了该手势,就会向所有的Target(对象)发送消息,并执行Action(方法)。虽然手势操作和UIControl类一样,都使用了Target-Action设计模式,原创 2020-08-17 09:43:38 · 11048 阅读 · 0 评论 -
iOS全埋点:事件发生的时间(事件发生的时间戳、事件持续的时长)
前言在数据采集时,与时间相关的问题主要体现在以下两个方面:·事件发生的时间戳·统计事件持续的时长在本地都会有缓存机制(比如,iOS应用程序的SQLite3数据库),即事件会先保存到本地缓存,当符合特定的同步策略时(比如,本地缓存了一定量的事件、每隔一定的时间间隔、关键事件发生等时刻),才会向服务端同步数据。I、事件发生的时间戳记录了事件发生的时间戳 // 设置事件发生的时间戳,单位为:毫秒 event[@"time"] = [NSNumber numberWithLong:NSDate.原创 2020-08-17 15:15:43 · 11582 阅读 · 0 评论 -
iOS TableView控件Click事件全埋点:使用Method Swizzling交换tableView:didSelectRowAtIndexPath进行实现
前言关于实现UITableView和UICollectionView控件$AppClick事件的全埋点,常见的方案有三种。·方法交换·动态子类·消息转发方案一:方法交换使用Method Swizzling交换UITableView的-setDelegate:方法;然后,获取实现UITableViewDelegate协议的delegate对象,在得到delegate对象之后,交换delegate对象的-tableView:didSelectRowAtIndexPath:方法;(在UITable原创 2020-08-15 11:39:28 · 10897 阅读 · 0 评论 -
iOS小技能: 获取当前正在显示的控制器
前言知识点:程序进入前台:applicationDidBecomeActive导航栏正在显示的子控制器:nav.visibleViewControllerTabVC 选中的控制器:selectedViewControllercode程序进入前台:applicationDidBecomeActive#pragma mark - 程序进入前台 切换应用至当前应用的收款信息界面,主...原创 2020-04-30 14:19:00 · 10975 阅读 · 0 评论 -
iOS进阶 :【NSProxy模拟多继承】作为一个委托代理对象,将消息转发给一个真实的对象或者自己加载的对象
前言NSProxy类不是继承自NSObject类或者NSObject子类,而是一个实现了NSObject协议的抽象基类。@interface NSProxy <NSObject> { Class isa;}这个类的作用就是作为一个委托代理对象,将消息转发给一个真实的对象或者自己加载的对象。当然,在大部分情况下,使用NSObject类也可以实现消息转发,实现方式与NSProxy类相同。但是,大部分情况下使用NSProxy类更为合适,理由如下。(1)NSProxy类实现了包原创 2020-08-15 15:08:08 · 10921 阅读 · 0 评论 -
iOS实现Click事件的全埋点方案二
前言当一个视图被添加到父视图上时,系统会自动调用-didMoveToSuperview方法。因此,我们可以通过Method Swizzling交换UIView的-didMoveToSuperview方法,然后在交换方法里给控件添加一组UIControlEventTouchDown类型的Target-Action,并在Action里触发AppClick事件,从而实现$AppClick事件全埋点I 、 `Method Swizzling交换UIView的-didMoveToSuperview方法新建U原创 2020-08-15 11:09:00 · 10982 阅读 · 0 评论 -
iOS实现Click事件的全埋点方案一
前言Method Swizzling交换UIApplication类中的-sendAction:to:from:forEvent:方法,然后在交换后的方法中触发AppClick事件,并根据target和sender采集相关属性,,实现AppClick事件,并根据target和sender采集相关属性,,实现AppClick事件,并根据target和sender采集相关属性,,实现AppClick事件的全埋点。对于控件的点击事件,至少还需要采集如下信息(属性):控件类型(element_type)控原创 2020-08-15 10:50:34 · 12114 阅读 · 1 评论 -
iOS小技能: Target-Action设计模式的运用
前言Target-Action,也叫“目标-动作”模式,即当某个事件发生的时候,调用特定对象的特定方法。“特定对象”就是Target,“特定方法”就是Action。Target-Action模式主要包含两个部分:Target(对象):接收消息的对象。Action(方法):用于表示需要调用的方法。see alsoiOS 使用代码触发button的点击事件:【 [btn sendActionsForControlEvents:UIControlEventTouchUpInside];】及教你找原创 2020-08-15 09:49:14 · 11661 阅读 · 0 评论 -
iOS全埋点AutoTrack:【AppEnd事件全埋点的实现步骤】(监听 `UIApplicationDidEnterBackgroundNotification `通知, 触发$AppEnd事件)
前言【应用程序状态】通过上面介绍的内容可知,一个iOS应用程序退出,就意味着该应用程序进入了“后台”,即处于Background状态。因此,对于实现$AppEnd事件的全埋点,我们只需要注册监听 UIApplicationDidEnterBackgroundNotification本地通知,然后在收到通知时触发AppEnd事件,即可实现AppEnd事件,即可实现AppEnd事件,即可实现AppEnd事件全埋点。I 、实现步骤1.1 第一步:注册监听注册监听UIApplicationDid原创 2020-08-14 10:08:48 · 11732 阅读 · 0 评论 -
iOS小技能:代码触发button的点击事件、快速找到按钮action方法
I、在逆向分析中的应用1.1 步骤1: 利用cy 找到对应的按钮地址 [UIWindow keyWindow].recursiveDescription().toString() 展开views结构 [UIWindow keyWindow].recursiveDescription().toString() 按钮文字unicode转码 ...原创 2018-06-23 12:47:16 · 25552 阅读 · 0 评论 -
iOS小技能:捕获Unix信号异常(全埋点)
前言Exception Type: EXC_BAD_ACCESS (SIGSEGV)Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000001000010VM Region Info: 0x1000010 is not in any region. Bytes before following region: 4283498480 REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION原创 2020-08-14 14:16:53 · 11173 阅读 · 0 评论 -
iOS AutoTrack简介【事件采集:AppStart、AppEnd、AppViewScreen、AppClick、AppCrashed】(有效地解决“历史数据回溯”问题)
OS全埋点的解决方案,同时涵盖了用户标识、时间相关、数据存储、数据同步、采集崩溃、App与H5打通、React Native全埋点。 包括iOS应用程序启动和退出、页面浏览、控件点击、手势等全埋点的实现原理,原创 2020-08-13 12:00:32 · 11337 阅读 · 0 评论 -
iOS全埋点AutoTrack:【采集应用程序的崩溃信息】(捕获NSException异常、Unix信号异常)通过NSSetUncaughtExceptionHandler函数来全局设置异常处理函数
前言对于线上版本发生的一些崩溃情况,我们只能通过收集崩溃信息来分析具体的原因。苹果公司也提供了崩溃信息上报的功能,但并不是所有的iPhone用户都开启了该功能。因此,对于数据采集SDK来说,采集崩溃信息并上报也是一项必不可少的功能。采集应用程序的崩溃信息,主要分为以下两种场景:NSException异常的捕获并传递UncaughtExceptionHandlerUnix信号异常本文重点讲解NSException异常的捕获并传递UncaughtExceptionHandler,捕获信号的请看这里原创 2020-08-14 11:46:36 · 10916 阅读 · 0 评论 -
iOS全埋点AutoTrack:【AppStart事件全埋点的实现步骤】(监听 `UIApplicationDidBecomeActiveNotification `通知, 触发$AppStart)
前言应用程序开始进入前台并处于活动状态·冷启动。·热启动(从后台恢复)。I 、修复几个特殊场景的问题·下拉通知栏并上滑,会触发AppStart事件。·上滑控制中心并下拉,会触发AppStart事件。·双击Home键进入切换应用程序页面,最后又选择当前应用程序,会触发$AppStart事件。继续分析,可以发现以下几个现象“·下拉通知栏时,系统会发送UIApplicationWillResignActiveNotification本地通知;上滑通知栏时,系统会发送UIApplication原创 2020-08-14 14:55:52 · 13794 阅读 · 0 评论 -
iOS全埋点AutoTrack:【实现页面浏览事件全埋点】利用Method Swizzling来交换UIViewController的-viewDidAppear:方法,然后在交换的方法中触发浏览事件
前言以利用Method Swizzling来交换UIViewController的-viewDidAppear:方法,然后在交换的方法中触发$AppViewScreen事件,以实现页面浏览事件的全埋点I、新建UIViewController+SensorsData在SensorsSDK项目中,新建一个UIViewController的类别SensorsDat在UIViewController+SensorsData.m文件中添加交换后的方法-sensorsdata_viewDidAppear原创 2020-08-14 17:27:33 · 11387 阅读 · 0 评论