事情是这样的,自己有一个安卓 app 很久没更新了,想着更新一下第三方 sdk。
本来用的是友盟统计和蒲公英更新这两个,前者用于统计数据和查看应用错误,后者用于应用内更新。
顺便这几天看到被谷歌收购的原 twitter 旗下产品 Fabric,也是一款应用统计和崩溃统计的产品。以及国内的后来者,腾讯的 Bugly。也都尝试引入应用试用了一会,在这谈谈几个感想。
( Bugly 主要体验了应用更新 sdk,没体验应用统计 sdk )
用了 Fabric 基于 IDE 插件的自动集成方式,国内 SDK 可以说是完败。 当然 Fabric 的文档和界面都是英文的,可以说是跟国内 sdk 相比的主要一个缺点吧。另外也存在被墙疑问(不确定)
Fabric 基本的集成根本无需看任何文档,它自动在你的项目中插入它的代码,也是可控的。国内的基本都是需要照着文档一步步下来。
当然这点其实只是时间消耗多少而已,其实并非关键。
这点可以做的最优秀的还是 Fabric,崩溃统计 crashlytics 和应用统计 answers 是分开的。你可以单独集成一个。
看看国内:
友盟:应用统计内自带了崩溃统计,不过可以代码设置不捕捉错误。算还行吧。
bugly: 应用更新自带崩溃统计,你没看错。。。就一个初始化入口,初始化后同时收集崩溃信息,无法单独设置关闭崩溃统计
蒲公英:一个大 SDK 包含了崩溃上报,应用更新,用户反馈。不过令人稍感安慰的是每个功能都是单独设置开启的
这个是我感受最明显的,是中外 SDK 差距的最大体现
我的项目早在 n 年之前集成友盟的统计从而带入了 READ_PHONE_STATE 权限,但是这个权限是很重的,做安卓开发的肯定知道,这个属于重要权限,甚至会影响上架 play。而我自己根本没用到,所以这次更新心想着一定要去掉这个权限。
首先看了友盟的最新 8.0.0 的文档,令人高兴的是友盟也意识到这个权限的重量,允许开发者去掉这个权限。这点至少做的还不错。
友盟(统计):
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.READ_PHONE_STATE (可去掉)
android.permission.INTERNET
要求四个还能去掉最重的,可以说是相当优秀了
蒲公英
接着更新蒲公英 SDK ( 3.0.x),首先使用 gradle 直接集成在线 aar 的方式。看了一下 aar 中已经带全了要求的权限。这是什么意思呢? 就是你在 gradle 中用compile 'com.pgyersdk:sdk:3.0.3'
集成蒲公英 sdk,假如你的 app 本来是白纸一张,那么这样集成直接给你带入:
android.permission.ACCESS_NETWORK_STATE
android.permission.INTERNET
android.permission.READ_PHONE_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.RECORD_AUDIO
android.permission.GET_TASKS
android.permission.READ_LOGS
android.permission.REQUEST_INSTALL_PACKAGES
9 个权限!而且重要的是你无法更改,因为这些都是在 aar 包里的。
不过蒲公英考虑到 Eclipse 这样的需求,提供了一个 jar 包,这样就允许开发者自己写权限,实测没有 READ_PHONE_STATE 也可以正常使用应用更新功能。 算是一个 workaround 吧
Bugly(更新 sdk)
bugly 是做的最差的,也是提供 aar 的包,为什么说最差呢,因为没提供 jar 包,你要用它的 sdk 必须全盘接受它的权限
android.permission.READ_PHONE_STATE
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.READ_LOGS
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.REQUEST_INSTALL_PACKAGES
嗯,7 个。。似乎比蒲公英还少两
那么 Fabric 呢?
同时集成 Fabric 的崩溃和统计两个功能,需要的权限是:
android.permission.INTERNET
你没看错,就这一个
上面提到的权限里面,重权限有两个:READ_PHONE_STATE 和 WRITE_EXTERNAL_STORAGE,需要用户手动给予权限,而且这两个也是谷歌在打压的两个权限。实际上不使用这两个权限也能实现功能,只不过国内似乎都偷懒了。
最终我更新的友盟了 8.0 统计 sdk,去掉了 READ_PHONE_STATE 权限。
应用内更新体验了蒲公英的 3.0 和 bugly,但是由于 bugly 又给我带回了 READ_PHONE_STATE,只能排除。
而蒲公英 3.0 相比 2.4 做了大幅的不向前兼容的更新,最终还是放弃,继续使用蒲公英 2.4 苟着。
1
tomato1111 OP 要这么多权限的背后,其实国内用户真的毫无隐私可言。哎
|
2
tomato1111 OP 补充:友盟是唯一文档中看到有考虑到 google play 合规问题的第三方 sdk 商,其他的真的丝毫没提到 google play
|
3
kera0a 2019-03-25 12:20:00 +08:00 via iPhone
Fabric 没被墙,而且他统计的数据也是脱敏的,非常不错。
友盟之类的统计我都是直接当广告一样 reject 掉 |
4
CodeCommunist 2019-03-25 12:45:42 +08:00 via Android
|
5
Lin0936 2019-03-25 13:03:47 +08:00 2
不是,“文档和界面是英文”这也能成为缺点?
|
6
tomato1111 OP @Lin0936 不要杠谢谢,我个人觉得就是缺点。毕竟我英文也没好到母语水平。
|
7
Lin0936 2019-03-25 13:09:44 +08:00
@tomato1111 没有杠,只是奇怪,打扰了。
|
8
nanaw 2019-03-25 16:44:27 +08:00
作为用户,有两个问题。
一是如何快速识别应用是否携带了哪些 sdk,组件,壳之类的东西。这样可以快速辨别直接不装或者禁用网络使用。 二是有什么办法能禁用这种统计?即使是崩溃日志也不应该在用户不知情的情况下随意上传(尤其很多应用还没有隐私协议) |
9
catalina 2019-03-25 16:49:02 +08:00 via Android
给友盟点个赞。
说实话国内这些 app 乱要权限基本上大部分都是这些 sdk 的锅。 |
10
kuyuzhiqi 2019-03-25 16:58:29 +08:00 via iPhone
不能这么说吧,看你应用在哪上架,国内大环境如此啊,更别说那些流氓 app 了
|
11
CommandZi 2019-03-25 17:18:59 +08:00
百度移动统计已经不提供 无 IDFA 版本了。腾讯云通信 SDK 坑得没边了。
|
12
qf19910623 2019-03-25 17:50:15 +08:00
Fabric 啥权限都不要,是怎么实现统计的,奇怪,至少也得拿一下设备号吧
|
13
finab 2019-03-25 18:02:01 +08:00
@qf19910623 他们不统计敏感信息
|
14
Love4Taylor 2019-03-25 18:04:15 +08:00
但是国内这堆 sdk 依旧到处拉屎. 即使是友盟...
|
15
HongJay 2019-03-25 18:32:00 +08:00
fabric 不墙是开玩笑的吧。。我怎么拉不下依赖
|
16
tomato1111 OP @qf19910623 因为需要权限才能获得设备 id,sim sn, mac 地址等敏感信息
但是如果你先要设备序列号,品牌,制造商,设备名是完全不需要权限的 要识别一台设备可以做到不使用权限,国内太喜欢读全部信息了 |
17
jinyang656 2019-03-26 00:02:35 +08:00 via Android
从其他依赖继承过来的依赖是可以去掉的,去查一下吧...
|
18
jinyang656 2019-03-26 00:03:38 +08:00 via Android
↑继承过来的权限声明↑
|
19
mmdsun 2019-03-26 07:29:05 +08:00 via Android
|
20
bluzz 2019-03-26 09:02:57 +08:00 via Android
@tomato1111 8.1 之后序列号也要权限了
|
21
dalieba 2019-03-26 09:49:44 +08:00 via Android
情报法来了解一下
|
22
Seney 2019-03-26 10:49:40 +08:00
来用 App Center 吧,功能全面,云端构建,云端测试,多人协作,中文文档,微软背书,社区丰富,在线 support。
|
23
little_cup 2019-03-26 10:55:01 +08:00
@jinyang656 能去掉不等于可以运行。当然确实可以通过编译时修改帮他们 debug,但这成本太高昂了。
|
24
jinyang656 2019-03-26 12:14:20 +08:00 via Android
@little_cup 是个问题,用过友盟、mob、有赞等等大部分是可以跑的,因为用户本来也有能力关闭这些权限
|
25
tomato1111 OP @jinyang656 你这样说不对,首先这些 sdk 商声明你要加这些权限,其次在提供的 aar 包里又已经加了这些权限。也没具体讲那些权限是可以去除的,甚至有些直接写明这些全是必要的。更没提如何去除添加依赖引入的权限。
虽然测试结果是可以去除一些也不妨碍运行结果,但是这种面对黑盒做法,这种近乎于猜的方式移除权限本来就不靠谱。你移除了权限你甚至不知道会发生啥,会不会导致应用崩溃? 留下悬念发布应用? 这不相当于自己给自己挖坑吗 |
26
yuhanle 2020-09-21 11:17:43 +08:00
App Center 在国内最近无法访问,有其他可以替代的更好的产品吗
|