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

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

也可以不唤醒应用直接显示通知

这个东西看 app 怎么设计了, 用来显示消息的进程可以仅仅是显示消息的也可以是夹杂私货
mxalbert1996
315 天前
@Musong @ShadowPower
所以你们说的都是应用被 force stop (强制关闭)的情况?那很正常啊,因为这种情况系统会特殊处理,在用户再次启动前禁止一切自启动和通知。
但这和我说的不矛盾,在应用被关闭(用户从最近应用里把应用划掉)和被系统杀死(因为内存或重启等原因)时 FCM 的 notification message 都是可以正常显示通知的。至于国产系统在应用被划掉时强制关闭应用,那又不是 AOSP 的标准行为,也不在 FCM 的考虑范围内。
mxalbert1996
315 天前
@Musong @ShadowPower
我在 Pixel 上实测电池用量设为受限并且从最近应用划掉以后仍然能正常收到通知。
mxalbert1996
315 天前
我研究了一下, @Musong 说的没错,FCM 确实是由应用里的 FirebaseMessagingService 接收 broadcast 来显示通知,但楼主的论据和结论都是错误的。首先「自启动权限」是国产系统特供的吧,AOSP 和 Pixel 里都没有这个东西。然后后台可以使用限制模式,不需要保活。结论,国际上 Android 不费电不费内存并不是误解。
ShadowPower
315 天前
@mxalbert1996 这和你的第一条回复已经不一样了。
其中的“系统会直接显示通知”是不对的,要是真有这种功能,OP 的问题已经完美解决了。
同样还有后面的“不需要应用启动”、“但事实上应用被关闭/杀死时也一样”。

那一条回复还有 6 个感谢……

从最近任务划掉的话,其实只有 Activity 被关闭了,其他的东西都还在。例如各种 Service ,其中就有推送。当然各种国产 ROM 的默认行为就是 Force Kill 了。

当然,这个 Service 跑半分钟左右就在后台挂起了,但仍然会驻留内存,占用一点内存空间。要是应用数量超级多,可能就会很明显。


国产 ROM 很多权限管理功能其实走在 Google 前头,最早的时候,Android 完全不存在这个功能。
后来原生 Android 可管理的权限也是慢慢加上去的。早期的粒度还非常粗,分类也不合理。

并不是原生 Android 的设计都是合理的,有些地方 Google 还得从国产 ROM 里借鉴优秀设计。

至于耗电,如果世界真的像想象中那么美好,那么谷歌其实用不着推出“自适应电池”、“电池优化”这种功能。
这些功能并没有把指定应用的一切后台耗电/耗内存的东西彻底消灭掉。
其实,不是因为推送功能会导致显著耗电,而是因为应用本身的“可能是合理的功能”在后台耗电。而 OP 需要的,只是看看应用推送的通知罢了,平时不希望这些功能在后台运作。

按理来说,当你只需要应用的一部分功能时,在保证这些功能正常运行的前提下,给应用的权限应该越小越好。

杀掉应用,并切断所有唤醒途径的话,大多数时间里,这款应用后台的资源占用就像没安装它一样。
而这时候,你又能通过系统服务来查看来自这个应用的推送。

这难道不是更好吗?

如果你确实需要一些后台运行的功能,系统也可以给用户这样的选择:手动开启 APP 的唤醒/后台运行权限。
01046
315 天前
受益匪浅,才知道 FMC 对停止的应用不起作用
wangxiaodong
315 天前
“如果你确实需要一些后台运行的功能,系统也可以给用户这样的选择:手动开启 APP 的唤醒/后台运行权限。”


@ShadowPower 国内 android 的白名单制度可不允许。
mxalbert1996
315 天前
@ShadowPower
「不需要应用启动」是没错的,应用并不需要在后台运行。如果你把它理解成是系统不会启动应用,其实也没差太多,因为只有 FirebaseMessagingService 被短暂地启动,最近的 Android 版本都会在短时间内杀死应用,应用并没有机会完全启动。
关于通知是由谁显示的,我已经在下面更正了。
强制停止应用并且禁止自启动当然不好,因为这是以牺牲应用功能为代价的。如果你不同意这一点的话,那我觉得我们也不用继续讨论了。
ShadowPower
315 天前
@wangxiaodong 白名单只是给 APP 默认自启动/后台无限制而已……
至于怎么设置都不能让应用在后台存活(像类原生一样)的情况,我只在一个 ROM 上遇到过:ColorOS 。避开这个就好了,当初我用这玩意确实杀后台杀麻了(我在 2019~2020 年的时候用,当时 OPPO Reno ACE 性价比很高)。


@mxalbert1996 这么做并不会牺牲应用功能,只是在增加功能,因为改动只有一个:
把原本由 APP 显示通知内容,改为由系统服务负责显示。

除此以外,其他功能没有任何区别。
没什么功能是强制的,都是根据个人意愿自行设置启用和禁用。

至于要不要杀掉应用,是否允许应用被唤醒,是用户的“额外选择”。而上面的改动,只是为了在这种选择下,依然不牺牲“消息推送”功能。

目前的情况是,你只能在“无法及时收到推送,甚至收不到推送”和“允许应用本身的后台功能”之间二选一。

前面已经提到过了,并不是“推送”本身导致耗电,而是应用里与推送无关的后台 Service 导致耗电。如果现实情况不是如此,那么 Google 也不需要推出那些电池优化功能。

把电池优化开到受限的话,推送也会受影响,会被推迟。策略是攒一段时间一起唤醒来减少唤醒次数。还有“对齐唤醒”优化技术,会让多个 APP 的后台在同一时间点唤醒,以减少整个设备的唤醒时长。

给 tg 、discord 等应用开限制后台,体验就不好。

但如果由系统来显示通知内容的话,当你 [确实想要] 彻底禁止某个应用在后台活动,你就可以强制停止,禁止后台启动,同时依然正常接收消息推送。

如果你不需要推送,还可以把通知权限关了。

---

打个比方:
这就好比你去一个餐厅吃饭,这家餐厅一旦点了米饭,必须同时点面条,面条还要付钱(指应用本身的后台功能带来的内存和电量影响),否则什么都吃不到。
而 OP 觉得这样不好,希望做一个改动,可以只点米饭,不点面条。改动内容是“米饭可以单独供应”,理由是“我不想吃面条,强制我点面条是浪费我的钱”。

你反驳 OP 的理由是“这个改动会影响你吃面条”。

然而现状是:米饭一直都可点可不点(即:通知权限可以自由开关)。
想点米饭,就得顺带点一些面条,可以点得少一点(指:限制后台),但不能不点。
如果经常吃米饭,还希望第一时间吃上(指:及时的通知推送),这家店会多给你一些面条,而且要多付钱(指:自适应电池)。

所以,“在不要面条的情况下,希望可以单独供应米饭”的要求,我感觉十分合理。也不影响你吃面条。
对于本身就喜欢吃面条的人(不限制应用后台活动的人),一直都可以只点面条,还能顺便来点米饭。
wangxiaodong
315 天前
@ShadowPower 自启动和后台存活其实是一个问题,我说的是必须保活的应用,比如 IM ; android 现在的行为是必须打开应用或者被已打开应用唤起,这不还是没收了 app 的保活能力嘛,就是说,没有自启动,你连启动的机会都没,就更别说后台进程了;不过,我用的国产手机似乎对 QQ 和微信就网开一面,为啥用户都不能决定某个 APP 的启动,而是厂商来决定。

我对 android 近年来的权限收紧是略有微词,但对国产 android 系统是坚决不认同。
ShadowPower
315 天前
@wangxiaodong
关于“为啥用户都不能决定某个 APP 的启动,而是厂商来决定”这一点。

除了上文提到的 ColorOS 这种无论如何设置都会半小时钟后无脑杀后台的蛋疼 ROM 外,其他厂商的 ROM (例如 MIUI )在用户自行决定要允许某个 APP 开机自启+驻留后台的时候,都可以做到。而且运行表现和类原生 ROM 基本一致。把自启动打开,省电策略改为“无限制”就好了。

唯一不能关闭的功能可能是划掉最近任务时强制终止。国产手机的海外版 ROM 默认行为和类原生一样,国内版 ROM 则和 iOS 一样。
wangxiaodong
315 天前
@ShadowPower
对的,划掉终止保活的服务很武断,应该设置为第 2 层菜单来关闭,第一层只干掉普通通知,而不是直接 clear 掉所有项。

google 在 android 也有个私心,就是推广 FCM ,估计将来就靠 FCM 来赚钱了,苹果系统也有自家垄断的通知渠道。

综上:直接没收用户的权利,然后自建通道谋私,解决方式就是用脚投票;
国产 android 系统更是过分,跟 360 杀毒软件挟持用户电脑,收 HelloWorld.exe 程序的拦路财一样的伎俩。

@NokiaForever
耗电问题,永远在这些商人的最低排序,我们自作多情了。
mxalbert1996
315 天前
@ShadowPower
你所谓的改动好像不止一个呀。

> 把原本由 APP 显示通知内容,改为由系统服务负责显示。
没问题呀,我不反对。

> 杀掉应用,并切断所有唤醒途径的话,大多数时间里,这款应用后台的资源占用就像没安装它一样。而这时候,你又能通过系统服务来查看来自这个应用的推送。这难道不是更好吗?
如果这个功能默认开启,那我坚决反对。如果默认关闭,那我并不反对,只是在因为有 FCM 加上 Android 越来越严的后台活动限制下已经相当好的国外应用环境下能有多大效果,又有多少用户会真正去用,都是疑问。

你不同意没关系,你也不用写长篇大论来说服我,我在国外用 Pixel 用得好得很,对我来说(可能也是对大部分用户来说)不用操心哪个应用需要后台哪个应用不需要才是更重要的。
Seulgi
315 天前
其实有一个思维误区,为什么国内这么做,为什么海外那些厂商不这么做。国内=一个国家,一个语言,一个思维习惯,一个认知。海外=许多国家,不同语言,不同法规,不同认知,不同习惯。思维不一样。
ShadowPower
315 天前
@mxalbert1996
> 杀掉应用,并切断所有唤醒途径的话,大多数时间里,这款应用后台的资源占用就像没安装它一样。而这时候,你又能通过系统服务来查看来自这个应用的推送。这难道不是更好吗?

这倒不是默认开启或者默认关闭的问题。目前的情况是,想要的人早已用上了,而不想要的人可以永远不用。它并不是一项需要“新增”的功能。
哪怕是类原生或者 Pixel ,也可以用 Thanox 这种插件,或者其他的东西来实现。我自己的类原生( crDroid )也整这玩意……

这里讨论的从来都不是“需要加切断唤醒禁止后台”的问题,相关的内容只是为了详细说明:
1. 为什么会有这样的需求;
2. 是不是真的耗电:当然,而且耗电的原因不是推送机制,只是解决耗电问题的做法都会影响推送;
3. 电池优化是不是能解决问题:能缓解,不能根治,而且依然影响推送机制。举个例子,微信虽然不接国内推送,但是接了 FCM 。然而开了“优化电池使用”之后,微信电话再也接不到了,因为收到推送的时候对方已经挂断好久了;

只是我看了帖子开头几个回复,要么觉得 OP 的需求是伪需求,要么可能真的觉得 FCM 的原理和苹果 APNs 完全一样……
所以我觉得,有必要把需求的来源和相关的技术细节都讲讲,希望能从“有这种需求的用户”的角度,去看待“修改 FCM 设计”这种想法。

而不应该一上来就否定整个帖子。


其实真的有不少用户有这种需求,甚至这就是一些人用 iOS 的理由。
但我觉得 iOS 走向了另一个极端……其实不是所有人都能接受。
mxalbert1996
315 天前
@ShadowPower
我相信任何一个阅读理解不是 0 分的人都能从你之前的回复看出你是在提出「 Google 应该学习国产 ROM 的自启动权限管理」,然后你现在又来说「这倒不是默认开启或者默认关闭的问题。目前的情况是,想要的人早已用上了,而不想要的人可以永远不用。它并不是一项需要“新增”的功能。」,我就不太能理解你到底想说什么。
另外你也不用装理中客,很显然你不是(当然我也不是)。
ShadowPower
315 天前
@mxalbert1996 这两者其实不冲突,前者是愿景,后者是现状。

进一步讲,从我的立场出发,我感觉现在的 Android 部分权限设计和 FCM 推送机制设计都不合理。
我当然会表明我认为权限设计不合理这一点,来回应上面的“AOSP 和 Pixel 里都没有这个东西”。因为前提不存在,则后面的诉求就失去了意义。

但现状是,其实 Google 不做的权限管控,甚至国内厂商也不做的(例如存储隔离),已经可以通过使用某些 ROM 或者安装特定的软件来达到目的了。

因此,Google 做不做,这一点不在诉求范围内,毕竟我已经用上了,但不妨碍我认为原生安卓的权限管理设计不如一些国内 ROM 完善。
但我觉得那是个好设计。用户的权限比 APP 开发商更高是一件好事,因此 Google 要是做了会更好。并非强制,而是留给有需要的用户。

当 Google 考虑到“有这样使用的用户”时,才能意识到 FCM 设计的问题在哪。实际上目前开着优化电池使用都已经觉得体验不太好了。

我现在就处于“既能用上 FCM ,又严格限制应用后台活动”的情况。哪怕我用的是类原生……

Android 本身是开放的,它就不应该“专为 Google 自己的手机设计”,尤其是非 Google 手机上面运行的 APP 其实都严重依赖 Google 的生态的情况下(接了 FCM ),那么 Google 就有必要考虑整个生态内的各种情况,使用一个让大家都满意的方案。


所以,真正需要 Google 做的,就只有改 FCM 推送设计。因为这玩意完全掌握在 Google 手里,需要推动应用开发者对升级后的 FCM 做一些兼容,不是 Google 亲自去做,那就没什么好办法。
ShadowPower
315 天前
@mxalbert1996 快下班了,写得有点乱。不过,我在倒是没在装理中客,只是并不想像一些回复那样仅仅单纯地输出观点,而是希望写的东西能把事情都讲清楚。
wangxiaodong
314 天前
“既能用上 FCM ,又严格限制应用后台活动”,我觉得这个需求很小,估计是一小撮儿极客而已,甚至很多人都不知道后台进程是什么。

我的想法是让 android 回归大众,不能因噎废食,一个恶意 app 违规推送了个通知,然后全部一刀切,让用户都没能力让喜欢的 app 加入白名单,况且这个白名单竟然需要给设备商付费或者必须是嫡系。

iOS 我都懒得提,标榜安全,按这个标准,iOS 早年复制粘贴都没做的时候,是不是更不会泄露,残缺宣传成安全,全球我看就苹果独此一家!
@ShadowPower
ShadowPower
314 天前
@wangxiaodong 你举的例子都不恰当,诉求只不过是想让 FCM 通知改为合理且可靠的设计,而不是想剥夺 Android 现有的功能。回想一下,你是不是一开始也觉得 FCM 就是系统框架负责显示通知的。

在我接触过的例子中,几乎所有对 FCM 了解不多的人,一开始都会这么想。我在几年前一些探讨如何让微信走 FCM 推送的帖子里(酷安上面),还发现有人觉得微信没了后台就收不到 FCM 推送,是因为微信自己没适配好。

当然,那时我也不知道,直到我真的去做了相关的开发才知道这些细节。原来 FCM 设计成了这样。


另外你的回复总是想讲阉割系统功能,增加更多限制之类的东西。我还是得说一下,和它有关的都不是“诉求”本身,而是“我对这些功能的看法”和为了说明“为什么会有这种需求”。

你说的阅读理解的问题,跳出这个问题,考虑这段对话:

A:你觉得他这次考试考得怎样?
B:他还得再加把劲。

这段对话里 B 可不一定希望他努力,也许只是委婉地表达“考得不怎么样”而已。是人物 B 对“他”的评价。虽然评价是消极的,但又不想直接说出来。

如果一直都在想着“诉求就是阉割系统功能”,那么理解就会有偏差了。

我还是得强调一下,关于禁止自启动、后台限制等,现在已经有了选择(无论是国产 ROM ,还是借助第三方工具),是“已经解决”的需求。因此,尽管我会提到,我对谷歌现在的设计有些看法,但这件事就不是“需要 Google 去做的事情”。

只是为了回复你之前提到的 AOSP 和 Pixel 都是这种设计,所以 FCM 这样设计没什么影响这个观点。
如果 FCM 只能在谷歌自己的设备上使用,其他手机上运行的 APP 都只能接入其他推送平台。那么确实没什么影响。

可是谷歌掌控着大多数海外 APP 推送……无论你用什么 ROM ,使用习惯是怎样的,想收这些应用推送,你都逃不过它们。

我的态度则是,两者在我的评价里都是不太好的设计,只是恰好正常使用的情况下互相兼容罢了。
为什么我觉得“让系统直接显示通知内容”更好,在前面都讲过了。

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

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

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

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

© 2021 V2EX