这是个严重的问题。我不知道那边的其他开发者是如何在中国的Android版本8及以上手机上实现推送通知的。
我使用cordova-fcm-插件在客户端实现推送通知,在服务器端实现FCM来触发通知。在安卓版本7之前,一切都很顺利。对于安卓版本8及以上版本,很少有中国手机,如One Plus、Oppo、Xiomi等,推出了一款名为电池优化的功能。默认情况下,所有安装的应用程序都是电池优化的。
正因为如此,如果应用程序是通过从应用程序托盘上滑动而被杀死的。然后应用程序将不会收到任何推送通知。但是像WhatsApp、Gmail、Skype等受欢迎的应用被这些移动制造商贴上了白色标签,所以即使应用程序被淘汰,它们也会继续收到通知。
如果我转到设置,->面糊,->电池优化,并选择应用程序,并选择不优化,那么通知将收到,即使应用程序被杀死。但我不能要求用户这样做。我想要一个有规划的解决方案。
请告诉我,我怎样才能做到这一点?注:我已经试过科多瓦插件-打瞌睡-优化,但没有改变。
发布于 2019-06-10 13:22:27
首先,你不应该使用那个插件,它已经两年没有更新了,但是android已经更新很久了。科多瓦-插件-防火基地得到了更积极的维护。
此外,它还取决于通知优先级。如果您的设备已进入休眠状态,则在手动唤醒之前,它将不会收到低优先级通知。通知优先级也可以设置在服务器端:
"android":{
"priority":"high"
},
"apns":{
"headers":{
"apns-priority":"10"
}
}发布于 2019-08-26 10:18:52
似乎有些制造商(小米,奥波,一加,华为,.)已经定制了android固件。基本上,如果你在“最近打开”的屏幕上杀死一个应用程序,你就是在扼杀后台进程。不幸的是,由于电池优化,自定义固件应用程序无法自动重新启动。这导致我们延迟或阻止通知。这种功能似乎不能以编程方式禁用。因此,没有真正的其他解决方案,而是做一个自制的网页,向用户解释如何去激活电池优化手动。这篇文章用比我更好的英语解释了整个过程。看来没有解决办法,但同时查看了防火墙云消息传递文档:云消息传递
高优先级。FCM试图立即传递高优先级消息,允许FCM服务在必要时唤醒睡眠设备,并运行一些有限的处理(包括非常有限的网络访问)。高优先级消息通常会导致用户与应用程序或其通知进行交互。如果FCM检测到一种它们没有检测到的模式,您的消息可能会被取消优先级。Android引入了app备用桶,这限制了你可以发送给你的应用程序的高优先级消息的数量,而这些消息不会导致用户使用你的应用程序或查看通知。如果响应高优先级消息,以用户可见的方式显示通知,则应用程序备用桶配额将不会被该消息占用。
然后,在我的情况下,经过测试,下面的服务器代码解决了我的1+ 6上的问题。
android: {
priority: 'high',
},
apns: {
headers: {
'apns-priority': '10',
},
},但请记住:
“高优先级的消息通常会导致用户与应用程序或其通知进行交互。如果FCM检测到一种不优先处理的模式,您的消息可能会被取消优先级。”所以我们应该注意这个优先事项
发布于 2019-08-27 14:55:53
我感谢回答我问题的人。对我来说,最终起作用的是,将这个应用程序发布到谷歌游戏商店。每当我尝试安装从Ionic CLI生成的调试/签名应用程序时,基于Oppo、One Plus等基于中国的设备都没有收到通知。所以我遵循了下面的方法。
https://stackoverflow.com/questions/56524654
复制相似问题