iOS通过Runtime实现友盟统计的实例代码

在友盟官网可以看到相应的步骤,申请appkey,导入SDK,然后在AppDelegate里面写入相应的代码,下面就是关键的代码:

实现页面的统计需要在每个UIViewController中配对调用如下方法:

  - (void)viewWillAppear:(BOOL)animated
  {
    [super viewWillAppear:animated];
    [MobClick beginLogPageView:@"PageOne"];//("PageOne"为页面名称,可自定义)
  }
- (void)viewWillDisappear:(BOOL)animated
  {
    [super viewWillDisappear:animated];
    [MobClick endLogPageView:@"PageOne"];
  }

几年之前做过这个,那时候才刚开始做iOS,就按照这个文档在每一个UIViewController里面写了这个方法,现在看来真是太low了。

这次又做这个友盟统计,就想起来用runtime解决这个问题。

在工程中创建一个UIViewController的Category,然后通过Runtime动态添加两个方法,分别替代viewWillAppear和viewWillDisappear方法。这样就不需要在每一个 UIViewController写这段代码了。

新建一个分类:

UIViewController+Statistics.h

//
// UIViewController+Statistics.h
// TongYuanHospital
//
// Created by ZSP on 2017/6/16.
// Copyright © 2017年 ZSP. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIViewController (Statistics)

@end

UIViewController+Statistics.m

//
// UIViewController+Statistics.m
// TongYuanHospital
//
// Created by ZSP on 2017/6/16.
// Copyright © 2017年 ZSP. All rights reserved.
//

#import "UIViewController+Statistics.h"

@implementation UIViewController (Statistics)

+ (void)load {

  //原本的viewWillApper方法
  Method viewWillAppear = class_getInstanceMethod(self, @selector(viewWillAppear:));

  //需要替换成能够输入日志的viewWillAppear
  Method logViewWillAppear = class_getInstanceMethod(self, @selector(logViewWillAppear:));

  //原本的viewWillDisappear方法
  Method viewWillDisappear = class_getInstanceMethod(self, @selector(viewWillDisappear:));
  //需要替换成能够输入日志的viewWillDisappear
  Method logviewWillDisappear = class_getInstanceMethod(self, @selector(logviewWillDisappear:));

  //两方法进行交换
  method_exchangeImplementations(viewWillAppear, logViewWillAppear);
  method_exchangeImplementations(viewWillDisappear, logviewWillDisappear);

}
-(void)logViewWillAppear:(BOOL)animated
{
  [self logViewWillAppear:animated];
  NSString *selfClass = NSStringFromClass([self class]);
  [MobClick beginLogPageView:selfClass];
  //当然这里也可以使用self.title作为页面的名称,这样在友盟后台查看的时候更加方便些
  //[MobClick endLogPageView:self.title];
}

-(void)logviewWillDisappear:(BOOL)animated
{
  [self logviewWillDisappear:animated];
  NSString *selfClass = NSStringFromClass([self class]);
  [MobClick endLogPageView:selfClass];
}

@end

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • IOS 开发之UITextField的光标操作扩展

    IOS 开发之UITextField的光标操作扩展 简介 在iOS开发中,有时候需要完全自主的定义键盘,用于完整的单词输入,例如计算机应用中,需要一次性的输入sin(,在移动光标时要完整的跳过sin(,在删除时也要完整的删除,这就需要对光标的位置进行精确控制,而ios并没有相关的函数可以直接操作光标,只给出了选择某个区域的功能,本文将介绍基于区域选择设计的UITextField扩展,用于获取光标位置以及移动光标. 实现原理 光标位置的获取 在textField中,有一个属性称之为selected

  • iOS实时录音和播放功能

    需求:最近公司需要做一个楼宇对讲的功能:门口机(连接WIFI)拨号对室内机(对应的WIFI)的设备进行呼叫,室内机收到呼叫之后将对收到的数据进行UDP广播的转发,手机(连接对应的WIFI)收到视频流之后,实时的展示视频数据(手机可以接听,挂断,手机接听之后,室内机不展示视频,只是进行转发.) 简单点说就是手机客户端需要做一个类似于直播平台的软件,可以实时的展示视频,实时的播放接收到的声音数据,并且实时将手机麦克风收到的声音回传给室内机,室内机负责转发给门口机. 这篇文章介绍iOS怎么进行实时的录

  • 详解Vue 2.0封装axios笔记

    前言 单页面应用大多采用前后端分离开发思路,我们知道,前端和后端交互有多中方式(服务器端渲染.Ajax.websocket等),今天我们主要讲解Ajax部分. 最近团队讨论了一下,Ajax 本身跟 Vue 并没有什么需要特别整合的地方,使用 fetch polyfill 或是 axios.superagent 等等都可以起到同等的效果,vue-resource 提供的价值和其维护成本相比并不划算,所以决定在不久以后取消对 vue-resource 的官方推荐.已有的用户可以继续使用,但以后不再把

  • 详解iOS 裁剪圆形图像并显示(类似于微信头像)

    本文主要讲解如何从照片库选择一张照片后将其裁剪成圆形头像并显示,类似于微信头像那种模式. 本文的方法也适用于当时拍照获取的图像,方法类似,所以不再赘述. 本文主要是在iOS 10环境下使用,此时如果要使用使用系统照片库.照相机等功能需要授权,授权方法如下: 右键点击工程目录中的"Info.plist文件-->Open As -->Source Code",打开复制以下你在应用中使用的隐私权限设置(描述自己修改): <key>NSVideoSubscriberAc

  • 简单谈谈axios中的get,post方法

    学习vue和nodejs的过程当中,涉及到了axios,今天为了测试,写了get和post两个方法来跟node服务端交互,结果因为header和参数弄了好久,在此记录一下,同时分享: 由于刚接触axios,在测试方法中,写的都是很简单的东西,不过能够实现基础功能,大神看到的话..非常欢迎指导.. //GET方法 axios.get(url, { params: { 'key': 'value' } }).then(function (response) { alert(''.concat(res

  • safari调试iOS app web页面的步骤

    Overview 当下移动端开发过程中大量使用前段H5.js等等技术,而这些web页面的调试在Xcode控制台中不太明了,经常我们移动app运行了就是方法,但是不能显示响应的效果,这时候或许就是已经报错了,但是我们在Xcode控制台是看不到这些错误.这时候我们就可以用功能强大的Safari浏览器来开启开发模式连接iPhone来调试app脸面的web页面了. Safari设置 打开Safari偏好者设置,选中"高级菜单",在页面最下方看到"在菜单中显示开发菜单"的复选

  • IOS 长链接与短链接之间的转换

    IOS 长链接与短链接之间的转换 首先需要将字符串使用md5加密,添加NSString的md5的类别方法如下 .h文件 #import <CommonCrypto/CommonDigest.h> @interface NSString (md5) -(NSString *) md5HexDigest; @end .m文件 #import "NSString+md5.h" @implementation NSString (md5) - (NSString *) md5Hex

  • iOS通过Runtime实现友盟统计的实例代码

    在友盟官网可以看到相应的步骤,申请appkey,导入SDK,然后在AppDelegate里面写入相应的代码,下面就是关键的代码: 实现页面的统计需要在每个UIViewController中配对调用如下方法: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [MobClick beginLogPageView:@"PageOne"];//("PageOne"为页面名称,可

  • iOS利用Runtime实现友盟页面数据统计的功能示例

    前言 一般项目中集成统计功能随因产品类型不同而使用功能不同,但大多数统计一般只有一个目的,就是记录用户习惯,研究用户习惯,从而为用户带来更好的体验,本文主要介绍了关于iOS用Runtime实现友盟页面数据统计功能的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.概念 1.实现页面的统计,需要在每一个类中实现这个方法: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [

  • iOS中创建表格类视图WBDataGridView的实例代码

    项目中创建表格, 引用头文件 #import "WBDataGridView.h" - (void)viewDidLoad{ [superviewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = [UIColorwhiteColor]; CGFloat margin = 10.f; CGFloat width = self.view.frame.size.wi

  • iOS开发中Swift 指纹验证功能模块实例代码

    iOS调用TouchID代码: override func viewDidLoad() { super.viewDidLoad() let context = LAContext() var error: NSError? = nil let canEvaluatePolicy = context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) as Bool if error

  • iOS实现左右可滑动的选择条实例代码分享

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewController @end RootViewController.m #import "RootViewController.h" //引入头文件 #import "SVSegmentedControl.h" @interface RootView

  • IOS NSUserDefault 记住用户名及密码功能的实例代码

    一般的登录界面都会有一个记住密码的选项,要实现这个功能可以使用NSUserDefault,这里只是讲解明文的处理方式,虽然这样是有一定的风险性的但是目前只是了解如何实现这个功能: 首先声明一个NSUserDefault对象: let userDefaults = NSUserDefaults.standardUserDefaults() //本地操作所需 然后根据是否记住密码按钮的状态来判断是否要为用户名和密码设置值,如果是记住密码,那么需要取出需要记住的密码,并且为这两个TextField赋值

  • 仿ios状态栏颜色和标题栏颜色一致的实例代码

    首先创建一个工具类 import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.os.Build; import android.support.v4.content.ContextCompat; import android.view.View; import android.view.ViewGroup; public clas

  • SQL对数据进行按月统计或对数据进行按星期统计的实例代码

    对于所有的需求,当你不知道怎么处理的时候,你就先用最简单的方法,或者说的明白一点,用最原始的方法,先实现业务需求再说. 一.对提现队列数据表"ims_checkout_task"进行汇总统计,按月汇总统计每个月的提现总额,提现总次数. 1.SQL操作如下: SELECT id ,SUM(case when FROM_UNIXTIME(addTime,'%Y-%m') = date_format(DATE_SUB(curdate(), INTERVAL 11 MONTH),'%Y-%m'

  • IOS在SwiftUI中显示模态视图的实例代码

    简介 这里教大家如何弹出一个简单的模态视图.分别有两个页面,ContentView和GCPresentedView,以下对应简称为A和B.我们要做的是在A视图中点击按钮跳转到B视图,然后再从B视图点击按钮返回到A视图. 步骤 在A视图中创建按钮和模态视图代码 struct ContentView: View { @State var isPresented = false var body: some View { Button(action: { self.isPresented = true

  • Java8进行多个字段分组统计的实例代码

    Java8进行多个字段分组统计实现代码如下: // 分组统计 Map<String, Long> countMap = records.stream().collect(Collectors.groupingBy(o -> o.getProductType() + "_" + o.getCountry(), Collectors.counting())); List<Record> countRecords = countMap.keySet().stre

随机推荐