iOS - CMP控件曝光统计

1 常用统计工具
众所周知,市面上已经有很多统计工具,下面是自己使用过的(免费的)并且使用率较高的一些品牌统计工具:友盟统计、诸葛io、GA(Google Analytics)、腾讯MTA等。
1.1 我们的日常
以上工具都能够基本满足对产品运营统计的大部分需求了,但是因为我们公司有一位痴迷于技术的产品经理,总之,哪些端有新技术或新工具时,他都要跟搬砖的【写代码的】我们来个底朝天讨论会,不管讨论结果如何,他都能够带着小狗等到主人回来的眼神,传达一种“咱们试试呗”的意思,祈求你的答应。还好,砸门有关二哥【技术总监】坐镇😆。工作量啥的都要合(bu)理(yao)安(tong)排(xiao)不是~
昨天,他在我们技术群里分享了一篇文章《婚礼纪 iOS 曝光统计实践》,而我刚好就在平时关注的《知识小集》公众号看到过。既然都准备要讨论了,那就试试Demo 再说了。
2 广告投放计费统计相关指标
2.1 常见广告投放计费指标
如文章题图,基本围绕下述三个指标进行计费
- CPM(Cost Per Mille) 每千人成本;
CPM是一种以展示付费的广告,只要向足够量级的用户展示了广告主的内容,广告主就为此付费。按此计费的广告一般是以展示为目的,曝光效果比较好,如开屏广告、富媒体广告等。- CPC(Cost Per Click) 每点击成本;
CPC是一种点击付费广告,根据广告被点击的次数收费。关键词竞价一般采用这种模式,在QQ空间、今日头条、UC等信息流广告系统中比较常见。- CPA(Cost Per Action) 每行动成本;
CPA是一种按投放实际效果计价的广告,这里的行动成本可以是CPD(Cost\nPer Download)下载成本、CPI(Cost Per Install)安装成本、CPS(Cost Per Sales)销售成本等。常见的CPA广告如应用商店、积分墙、流量联盟等。
了解之后,那么这篇文章《婚礼纪 iOS 曝光统计实践》,写的就是对 CPM 的一个简单的统计工具了。
3 婚礼纪曝光统计工具原理
3.1 参考工具的技能点
原文中已有详细分析过程,这里简单总结基本使用了iOS的哪些技能点:
-
从download 源码后的工程布局上看,婚礼纪项目应该是使用了 cocoapods 组件化方式进行项目管理
-
加载执行机制:分类的 load 方法使用
-
MethodSwizzle:在 UIView 分类的 load 方法中采用 runtime 的
method_exchangeImplementations
方法使用
-
分类中添加属性:runtime的
objc_setAssociatedObject
和objc_getAssociatedObject
方法使用
-
控件在屏幕上显隐及变化的相关逻辑:如:
didMoveToWindow
的实践解读
3.2 在巨人的基础上优化
在实践测试婚礼纪的Demo 后,发现如下优化点:
- 原 Demo 中对系统的方法进行交换后,进行的
hlj_updateViewVisible
没有进行监听判断,导致根本不需要进行跟踪的 View 都执行了该hlj_updateViewVisible
方法。下述是添加判断依据,减少计算次数同时没跟踪View 不会进一步执行该方法:
在执行方法前添加判断条件
- (void)hlj_updateViewVisible {
if (!self.hlj_trackModel) return; // 需要被跟踪的 View会添加 trackModel 否则不要进行判断计算
... //原方法逻辑
}
- 原 Demo 中控件的有效曝光判断是通过与 widow 有交集即为曝光,此处我觉得有效曝光是控件的完全显示才算,所以使用了并集的逻辑:
BOOL isContained = CGRectContainsRect(screenRect, viewRect);
- 我添加了一个已知遮挡控件的判断逻辑,即如果被已知遮挡控件完全覆盖则不算有效曝光:
- (void)hlj_setTrackTag:(NSString *)trackTag position:(NSInteger)position trackData:(NSDictionary *)trackData shieldView:(UIView *)shieldView;
4 总结
好了,到此可以拿出去跟"痴汉"讨论了
- 项目难点不多,使用的都是常见的技术点
- 项目的实用性真心不错
- 自己Demo 中还有一点比较在意,就是导航栏的遮挡算不算有效曝光呢?
- 已在项目中使用该工具,后续有更多优化地方会持续更新,欢迎关注。
感谢 “婚礼纪移动团队” 以及 “知识小集”的无私分享。
-------------------------- 2018年07月27日22:55:02更新 --------------------------
- 向作者问的问题已有回复,issue 我也关闭了,但是,作者说子控件的track与父控件的track关系是包含的,这个我不太同意,我觉得控件的独立 track 好一些。
- 作者已优化Demo,如同意原作者想法的可以前往下载。区别不大。