iOS - CMP控件曝光统计

iOS - CMP控件曝光统计_第1张图片
CMP 曝光

1 常用统计工具

众所周知,市面上已经有很多统计工具,下面是自己使用过的(免费的)并且使用率较高的一些品牌统计工具:友盟统计、诸葛io、GA(Google Analytics)、腾讯MTA等。

1.1 我们的日常

以上工具都能够基本满足对产品运营统计的大部分需求了,但是因为我们公司有一位痴迷于技术的产品经理,总之,哪些端有新技术或新工具时,他都要跟搬砖的【写代码的】我们来个底朝天讨论会,不管讨论结果如何,他都能够带着小狗等到主人回来的眼神,传达一种“咱们试试呗”的意思,祈求你的答应。还好,砸门有关二哥【技术总监】坐镇。工作量啥的都要合(bu)理(yao)安(tong)排(xiao)不是~

昨天,他在我们技术群里分享了一篇文章《婚礼纪 iOS 曝光统计实践》,而我刚好就在平时关注的《知识小集》公众号看到过。既然都准备要讨论了,那就试试Demo 再说了。

2 广告投放计费统计相关指标

2.1 常见广告投放计费指标

如文章题图,基本围绕下述三个指标进行计费

  1. CPM(Cost Per Mille) 每千人成本;
    CPM是一种以展示付费的广告,只要向足够量级的用户展示了广告主的内容,广告主就为此付费。按此计费的广告一般是以展示为目的,曝光效果比较好,如开屏广告、富媒体广告等。
  2. CPC(Cost Per Click) 每点击成本;
    CPC是一种点击付费广告,根据广告被点击的次数收费。关键词竞价一般采用这种模式,在QQ空间、今日头条、UC等信息流广告系统中比较常见。
  3. CPA(Cost Per Action) 每行动成本;
    CPA是一种按投放实际效果计价的广告,这里的行动成本可以是CPD(Cost\nPer Download)下载成本、CPI(Cost Per Install)安装成本、CPS(Cost Per Sales)销售成本等。常见的CPA广告如应用商店、积分墙、流量联盟等。

了解之后,那么这篇文章《婚礼纪 iOS 曝光统计实践》,写的就是对 CPM 的一个简单的统计工具了。

3 婚礼纪曝光统计工具原理

3.1 参考工具的技能点

原文中已有详细分析过程,这里简单总结基本使用了iOS的哪些技能点:

  1. 从download 源码后的工程布局上看,婚礼纪项目应该是使用了 cocoapods 组件化方式进行项目管理


    iOS - CMP控件曝光统计_第2张图片
  2. 加载执行机制:分类的 load 方法使用

    iOS - CMP控件曝光统计_第3张图片

  3. MethodSwizzle:在 UIView 分类的 load 方法中采用 runtime 的method_exchangeImplementations方法使用

    iOS - CMP控件曝光统计_第4张图片

  4. 分类中添加属性:runtime的objc_setAssociatedObjectobjc_getAssociatedObject方法使用

    iOS - CMP控件曝光统计_第5张图片

  5. 控件在屏幕上显隐及变化的相关逻辑:如:didMoveToWindow的实践解读

3.2 在巨人的基础上优化

在实践测试婚礼纪的Demo 后,发现如下优化点:

  1. 原 Demo 中对系统的方法进行交换后,进行的hlj_updateViewVisible没有进行监听判断,导致根本不需要进行跟踪的 View 都执行了该hlj_updateViewVisible方法。下述是添加判断依据,减少计算次数同时没跟踪View 不会进一步执行该方法:
在执行方法前添加判断条件
- (void)hlj_updateViewVisible {
    if (!self.hlj_trackModel) return; // 需要被跟踪的 View会添加 trackModel 否则不要进行判断计算
  ... //原方法逻辑
}
  1. 原 Demo 中控件的有效曝光判断是通过与 widow 有交集即为曝光,此处我觉得有效曝光是控件的完全显示才算,所以使用了并集的逻辑:
BOOL isContained = CGRectContainsRect(screenRect, viewRect);
  1. 我添加了一个已知遮挡控件的判断逻辑,即如果被已知遮挡控件完全覆盖则不算有效曝光:
- (void)hlj_setTrackTag:(NSString *)trackTag position:(NSInteger)position trackData:(NSDictionary *)trackData shieldView:(UIView *)shieldView;
  1. 还有一些问题,由于技术理解不到位,正在请求原作者解答的,如果你知道,欢迎指教

  2. 下面是fork 后优化的Demo,欢迎评论指正

4 总结

好了,到此可以拿出去跟"痴汉"讨论了

  1. 项目难点不多,使用的都是常见的技术点
  2. 项目的实用性真心不错
  3. 自己Demo 中还有一点比较在意,就是导航栏的遮挡算不算有效曝光呢?
  4. 已在项目中使用该工具,后续有更多优化地方会持续更新,欢迎关注。

感谢 “婚礼纪移动团队” 以及 “知识小集”的无私分享。

-------------------------- 2018年07月27日22:55:02更新 --------------------------

  • 向作者问的问题已有回复,issue 我也关闭了,但是,作者说子控件的track与父控件的track关系是包含的,这个我不太同意,我觉得控件的独立 track 好一些。
  • 作者已优化Demo,如同意原作者想法的可以前往下载。区别不大。

你可能感兴趣的:(iOS - CMP控件曝光统计)