喷一下国内的安卓第三方服务 SDK

2019-03-25 11:57:17 +08:00
 tomato1111

事情是这样的,自己有一个安卓 app 很久没更新了,想着更新一下第三方 sdk。
本来用的是友盟统计和蒲公英更新这两个,前者用于统计数据和查看应用错误,后者用于应用内更新。
顺便这几天看到被谷歌收购的原 twitter 旗下产品 Fabric,也是一款应用统计和崩溃统计的产品。以及国内的后来者,腾讯的 Bugly。也都尝试引入应用试用了一会,在这谈谈几个感想。
( Bugly 主要体验了应用更新 sdk,没体验应用统计 sdk )

SDK 集成体验

用了 Fabric 基于 IDE 插件的自动集成方式,国内 SDK 可以说是完败。 当然 Fabric 的文档和界面都是英文的,可以说是跟国内 sdk 相比的主要一个缺点吧。另外也存在被墙疑问(不确定)

Fabric 基本的集成根本无需看任何文档,它自动在你的项目中插入它的代码,也是可控的。国内的基本都是需要照着文档一步步下来。

当然这点其实只是时间消耗多少而已,其实并非关键。

SDK 功能区分 /粗粒度

这点可以做的最优秀的还是 Fabric,崩溃统计 crashlytics 和应用统计 answers 是分开的。你可以单独集成一个。
看看国内:
友盟:应用统计内自带了崩溃统计,不过可以代码设置不捕捉错误。算还行吧。
bugly: 应用更新自带崩溃统计,你没看错。。。就一个初始化入口,初始化后同时收集崩溃信息,无法单独设置关闭崩溃统计
蒲公英:一个大 SDK 包含了崩溃上报,应用更新,用户反馈。不过令人稍感安慰的是每个功能都是单独设置开启的

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 苟着。

13267 次点击
所在节点    Android
26 条回复
tomato1111
2019-03-25 12:05:34 +08:00
要这么多权限的背后,其实国内用户真的毫无隐私可言。哎
tomato1111
2019-03-25 12:11:08 +08:00
补充:友盟是唯一文档中看到有考虑到 google play 合规问题的第三方 sdk 商,其他的真的丝毫没提到 google play
kera0a
2019-03-25 12:20:00 +08:00
Fabric 没被墙,而且他统计的数据也是脱敏的,非常不错。
友盟之类的统计我都是直接当广告一样 reject 掉
CodeCommunist
2019-03-25 12:45:42 +08:00
360 开源了一个,可以接入到自己服务器。而且 360 这个老流氓对监控很有一套,

https://github.com/Qihoo360/ArgusAPM
Lin0936
2019-03-25 13:03:47 +08:00
不是,“文档和界面是英文”这也能成为缺点?
tomato1111
2019-03-25 13:08:36 +08:00
@Lin0936 不要杠谢谢,我个人觉得就是缺点。毕竟我英文也没好到母语水平。
Lin0936
2019-03-25 13:09:44 +08:00
@tomato1111 没有杠,只是奇怪,打扰了。
nanaw
2019-03-25 16:44:27 +08:00
作为用户,有两个问题。
一是如何快速识别应用是否携带了哪些 sdk,组件,壳之类的东西。这样可以快速辨别直接不装或者禁用网络使用。
二是有什么办法能禁用这种统计?即使是崩溃日志也不应该在用户不知情的情况下随意上传(尤其很多应用还没有隐私协议)
catalina
2019-03-25 16:49:02 +08:00
给友盟点个赞。
说实话国内这些 app 乱要权限基本上大部分都是这些 sdk 的锅。
kuyuzhiqi
2019-03-25 16:58:29 +08:00
不能这么说吧,看你应用在哪上架,国内大环境如此啊,更别说那些流氓 app 了
CommandZi
2019-03-25 17:18:59 +08:00
百度移动统计已经不提供 无 IDFA 版本了。腾讯云通信 SDK 坑得没边了。
qf19910623
2019-03-25 17:50:15 +08:00
Fabric 啥权限都不要,是怎么实现统计的,奇怪,至少也得拿一下设备号吧
finab
2019-03-25 18:02:01 +08:00
@qf19910623 他们不统计敏感信息
Love4Taylor
2019-03-25 18:04:15 +08:00
但是国内这堆 sdk 依旧到处拉屎. 即使是友盟...
HongJay
2019-03-25 18:32:00 +08:00
fabric 不墙是开玩笑的吧。。我怎么拉不下依赖
tomato1111
2019-03-25 21:45:08 +08:00
@qf19910623 因为需要权限才能获得设备 id,sim sn, mac 地址等敏感信息
但是如果你先要设备序列号,品牌,制造商,设备名是完全不需要权限的
要识别一台设备可以做到不使用权限,国内太喜欢读全部信息了
jinyang656
2019-03-26 00:02:35 +08:00
从其他依赖继承过来的依赖是可以去掉的,去查一下吧...
jinyang656
2019-03-26 00:03:38 +08:00
↑继承过来的权限声明↑
mmdsun
2019-03-26 07:29:05 +08:00
我用 App center 感觉还行。

https://visualstudio.microsoft.com/app-center/
bluzz
2019-03-26 09:02:57 +08:00
@tomato1111 8.1 之后序列号也要权限了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/548241

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX