背景
由于国内 Android 生态百家争鸣(其实TM就是混乱),各个手机厂家对 Android Rom 进行了深度定制,衍生出了各种 Android 系统。由于国内无法使用 Google GCM 服务,Push 消息无法送达。再加上各个 Android Rom 对后台的严苛管理,导致自建通道的长连接进程无法正常存活,如极光推送、友盟推送在 oppo 和小米手机上也无法做到及时推送。Android绿色联盟看来现如今也指望不上。但是公司业务迫切需要Push,让我们做一个技术选型。为了保持一个严谨的态度我们爬取了豌豆荚商店14种分类,每种分类前100名的APP,分析看看常见的几个push通道哪一个是接入率最高的。(本来爬取的是APP排行榜前200名,结果发现阿里系的基本都是接入友盟,腾讯系是接入信鸽,这样样本太少分析不够准确)
获取APP下载数据
我们打开豌豆荚APP的分类,点击影音播放分类
通过Charles抓包工具抓取数据 这样就可以得到APP的具体数据了,由于豌豆荚的request有一个sign
加密字段我们无法通过Python编写自动请求脚本,由于我也懒得研究这个加密的md5是怎么来的,就直接把Charles的抓包response保存为json文件放在相应的目录,通过一个脚本去解析我们需要的数据。 通过获取APP json的
downloadUrl
字段获取下载链接下载所有APP。1400个全部下载完成如下:
`
分析APP
我们通过apktool逆向工具解压apk文件,然后检索相应的特征就可以了,例如
- 极光推送的检测->判断AndroidManifest.xml中的关键字: cn.jpush.android.service.PushService
- 个推的检测->判断AndroidManifest.xml中的关键字: com.igexin.sdk.PushService
...... - OKHttp的检测->文件存在publicsuffixes.gz或者smali/ smali_classes*/okhttp
这里添加了一个OKHttp SDK的分析主要是作为一个基准,看一个成熟的SDK会有多少的接入率。还有一个原因是看看该分类的APP对网络的依赖性是否比较大,比如系统工具
分类下的APP显然没有新闻阅读
和网上购物
分类对网络的依赖性大。
由于apk文件被apktool解压后文件会变得超级大,所以我们只能逐个分类分析,每分析完一个分类删除所有解压文件后再分析下一个分类,最后再整合数据。(其实就是特么穷逼,只能买得起256G的MAC,放不下这么多数据=-=)
我们通过Python csv将分析结果输出为csv文件,便于后面导入到Excel后进行图形化数据分析。
各种分类的分析结果
由于在下载或者apktool解压的过程中可能有个别apk下载或者解压失败,我们就直接跳过,因为个别样本的错误并不会影响我们整体数据的分析。
通过14种分类的数据横向对比我们得出一些结论:系统工具
分类的APP对网络的依赖性果然是最低的。比如一个文件管理APP要啥网络权限- push的占有率也可以从侧面反映一个分类行业的成熟度,如
新闻阅读
和网上购物
成熟度较高 育儿亲子
分类下面的APP成熟度最低,但是也是现在比较热门的互联网+行业。育儿亲子
分类下的极光推送明显优势,这估计是他们主打的营销方向,即新生和小型客户。
汇总后分析结果
- 我们可以看到在友盟、信鸽、极光和个推等这些第三方通道中,极光推送以极其微弱的优势领先。
- 厂商通道中确实还是华为大佬第一,不过小米也不差。
- 信鸽推送可能是起步比较晚,数据相差其他通道一大截。
其他
- 为什么没有分析vivo和oppo通道?因为这两个通道起步太晚,接入APP应该比较少,分析对比的意义也不是很大
- 以后我们技术选型需要采用某一个开源库的时候是不是可以先分析市场上APP的占有率,再做决定?
- 是不是可以分析竞品的占有率?比如我是一个个推的员工,我分析极光和友盟的市场占有率以及客户名单,定向推销。
项目地址
github.com/LitterSun/S…
第一次写Python,简直稀烂,请轻虐……