为何谷歌不学中国厂商所统一推送服务?

316 天前
 NokiaForever
谷歌的 FCM 推送和华为推送、小米推送等不一样,是设备和谷歌 fcm 服务器 mtalk.google.com 维持一个长链接,服务端发消息给设备,设备广播拉起对应应用,然后由应用接收消息,故应用需要有自启动权限,后台不能使用“限制”模式,而是要使用“优化”,使应用进缓存。安卓的 fcm 是需要 app 在后台的没想到吧.完全关闭的情况下是收不到消息的.国产推送是有一个统一的推送服务在后台保活。
谷歌这做法不是让应用能自启动驻留后台,耗费电量吗?苹果、小米这些推送服务是完全不让应用能够自启动(如果需要就手动开启),就防止了应用耗费额外电量。
所以在国际上 Android 不费电不废内存可能是一种误解?
15840 次点击
所在节点    Android
82 条回复
nothingistrue
316 天前
建议楼主先了解一下 Android 的后台机制。

另外楼主的标题应该翻译一下:为何谷歌不学苹果,或者中国的各种爹,强制接管应用的通知功能。
evill
316 天前
@wangxiaodong 你是对这些流氓一点都不了解,互信?不可能的
不限制的话,啥都能干出来,比如 白噪音保活 [dog]
clementewy
316 天前
转安卓后发现,我手机里安装的所有 app 只有微信是需要自启动的。
mcluyu
316 天前
大清早就让我无了个大语。。。
unco020511
316 天前
@mxalbert1996 并不,就算是 Notification message 也还需要应用在前台或者在后台,如果应用被杀死,是接收不到的,我们两亿的出海应用,之前特别治理过 FCM 的问题
wangxiaodong
316 天前
@evill 让用户决定是否启闭,而不是收拢到一言堂的厂家手里,手机出钱者和开发者干瞪眼,只要是为了满足业务需求保活,自然是正当的,我反对的是厂商的一刀切,只给付钱或媾和的厂家白名单,而不是把设备控制权给到手机购买者。

最希望的模式是:厂商建议启闭、用户决定启闭。
F7ionsy
316 天前
你在鬼扯什么?
ShadowPower
316 天前
@mxalbert1996 我开发过 FCM 应用,之前负责公司 APP 里的推送这一块。
虽然文档是这么写,但实际上 FCM 的工作模式并不是简单的一句“直接由系统处理”就能概括的。

像是小米推送、苹果的 APNs ,都是系统自带的组件来负责从接收推送内容到呈现通知推送的全流程。
仅当你点击了通知,或者是国内推送平台所谓的“透传通知”时,系统才会真正唤醒相应的 APP 处理推送内容。

FCM 并不是这种设计。它的职责只有统一收取推送内容,然后转发给 APP 。系统只负责一件事情:统一各种 APP 与推送服务之间的网络连接。

在 FCM 接收到通知之后,其实没有“把通知显示出来”的能力。最终都由 APP 自己处理。

文档中提到的“FCM SDK”并不是一个系统组件(系统组件也不会叫做 SDK……),而是集成到 APP 内部的一个模块,封装了接收和处理通知的逻辑。如果 APP 不能启动,那么其中的 FCM SDK 也不能帮你把通知显示出来。

如果你把应用关闭/杀死了,此时系统会短暂唤醒 APP ,然后走 APP 里的逻辑。消息类型并不会改变这一点,只是 FCM SDK 简化了应用开发,不需要用户自己创建通知罢了。原文是:“此类消息由 FCM SDK 自动处理”。

在你发的连接里,其实下面还有几句话:
“当您的应用在后台运行时,如果您希望 FCM SDK 自动处理通知的显示,请使用通知消息”
“应用在后台运行时,通知消息将被传递至通知面板。应用在前台运行时,消息由回调函数处理”

里面总会提到“运行”这一点,其实挺准确的。只是没有提到应用被杀死时会被 FCM 唤醒……


完全禁止应用后台自启动的情况下(无论是国内 ROM 限制,还是用 Xposed 修改了系统框架限制),FCM 日志里都是“Failed to broadcast to stopped app *********”。
ShadowPower
316 天前
其实 OP 的诉求是合理的,简单来说就是:

希望能像苹果一样,由系统组件统一呈现 APP 通知。
目的是为了能完全禁止自启动而不影响正常使用。


当然我能理解,不是所有人都了解 FCM 的工作原理。

论坛里有过一些帖子抱怨国内 ROM 收不到 FCM 推送,其实原因无非两种:
1. 谷歌服务的后台保不住(我只在老的华为手机上观察到这一点,其实大多数国产 ROM 还真给谷歌后台,只要打开谷歌服务开关,真的耗电);
2. 收到了 FCM 推送,但 APP 唤醒被拦截了,显示不了通知内容(这才是主要原因)。
ShadowPower
316 天前
@wangxiaodong 然而绝大多数应用都应该禁止自启动,因为这种能力对于 99%的应用来说,都不是正常运行所必须的。
否则 iPhone 根本就不能用,因为真的没有,有也是 30 秒存活……

你提到了保活,对于真正依赖这个能力的应用,Android 给了一条路:如果你想后台保活,那么你应该创建一个常驻通知。
这个设计其实是:必须醒目地告诉用户“我就是想要在后台运行”。

这比 iOS 上的根据有没有播放音频来限制后台还要高明得多。

你会发现音乐播放器必定有一条通知来给你控制播放,除了方便用户操作以外,其实“保活”才是这条通知的核心目的。
高德地图、百度地图等应用,导航的时候也会创建一条常驻通知。

如果用户知道应用的功能必须后台保活,用户自然会理解。假如一个看新闻的应用也要后台保活,用户马上就会察觉到这个应用可能有问题。
evill
316 天前
@wangxiaodong 太高估用户素质(褒义词)了,90%的人不知道什么是保活,为何要保活。
高估了 app 厂商的素质,为了广告、用户信息等等,能保活决定保活,参考摇一摇进入广告(那段时间,走路都不敢开起 APP ,比跳转)
evill
316 天前
决定-》绝对
lugoyoung
316 天前
@unco020511 老哥可否留个联系方式, 我这边也是出海应用遇到了 FCM 的问题, 能否留个联系方式,有偿咨询下?
adoal
316 天前
那么为啥国内都要做保活呢,为啥混战了这么多年才有好几路的统一推送呢?
wy315700
316 天前
FCM 做的真的拉,频繁拉起 APP 。。
这还能洗
wy315700
316 天前
@ShadowPower
然而这条规定在国产 UI 上可能也没用。

MIUI 上装 Apple Music ,也躲避不了被杀的命运。经常歌听着听着就没了。后台被杀了
unco020511
316 天前
@lugoyoung 你留绿色软件,我加你
unco020511
316 天前
其实楼主说的是对的,很多人没明白这其中的区别.
ShadowPower
316 天前
@wy315700 其实这是 Apple Music 的 bug ,我用原生安卓的时候也会听着听着就没了,有一次抓了 logcat ,发现是 AM 自己崩溃了。
用其他播放器就没有这个问题。
lugoyoung
316 天前
@unco020511 eWFuZ18yaHU=
谢谢大佬

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

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

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

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

© 2021 V2EX