Android 爱奥尼亚3&;安卓8:电池优化正在阻止安卓8及以上版本的通知

Android 爱奥尼亚3&;安卓8:电池优化正在阻止安卓8及以上版本的通知,android,cordova,ionic3,Android,Cordova,Ionic3,这是一个严重的问题。我不知道其他开发者是如何在安卓8及以上版本的中国手机上实现推送通知的 我使用在客户端实现推送通知,在服务器端使用FCM触发通知。在Android版本7之前,一切都很正常。对于Android版本8及以上,在少数中国手机中,如One Plus、Oppo、Xiomi等,它们引入了一种称为电池优化的功能。默认情况下,所有安装的应用程序都经过电池优化 因此,如果从应用程序托盘中刷卡导致应用程序死亡。然后应用程序将不会收到任何推送通知。但流行的应用程序如WhatsApp、Gmail、Sk

这是一个严重的问题。我不知道其他开发者是如何在安卓8及以上版本的中国手机上实现推送通知的

我使用在客户端实现推送通知,在服务器端使用FCM触发通知。在Android版本7之前,一切都很正常。对于Android版本8及以上,在少数中国手机中,如One Plus、Oppo、Xiomi等,它们引入了一种称为电池优化的功能。默认情况下,所有安装的应用程序都经过电池优化

因此,如果从应用程序托盘中刷卡导致应用程序死亡。然后应用程序将不会收到任何推送通知。但流行的应用程序如WhatsApp、Gmail、Skype等都被这些手机制造商贴上了白色标签,所以即使应用程序被关闭,它们也会继续收到通知

如果我进入设置->电池->电池优化并选择该应用程序,并选择不优化,则即使该应用程序被关闭,也会收到通知。但我不能要求用户这样做。我想要一个程序化的解决方案

请让我知道,我如何才能做到这一点?
注意:我已经尝试过cordova插件doze Optimize,但没有改变。

首先,你不应该使用该插件,它已经两年没有更新了,但android API已经很久没有更新了。更积极地维护

此外,它还取决于通知优先级。如果您的设备已进入睡眠状态,则在手动唤醒之前不会收到低优先级通知。也可以在服务器端设置通知优先级:

"android":{   
    "priority":"high"
  },
"apns":{
    "headers":{
      "apns-priority":"10"
    }
  }

首先,你不应该使用这个插件,它已经两年没有更新了,但是android API已经更新很久了。更积极地维护

此外,它还取决于通知优先级。如果您的设备已进入睡眠状态,则在手动唤醒之前不会收到低优先级通知。也可以在服务器端设置通知优先级:

"android":{   
    "priority":"high"
  },
"apns":{
    "headers":{
      "apns-priority":"10"
    }
  }

似乎一些制造商(小米、Oppo、One Plus、华为等)已经定制了android固件。 基本上,如果你在“最近打开”屏幕上关闭一个应用程序,你就是在关闭后台进程。 不幸的是,使用自定义固件时,由于电池优化,应用程序无法自动重新启动。 这会导致延迟或阻止通知。 似乎无法通过编程禁用此函数性。所以,没有其他真正的解决方案比做一个自制的页面,向用户解释如何手动去激活电池优化。 这篇文章用比我更好的英语解释了整个过程。 但与此同时,查看firebase云消息文档:

高优先级。FCM尝试立即发送高优先级消息,允许FCM服务在必要时唤醒休眠设备,并运行一些有限的处理(包括非常有限的网络访问)。高优先级消息通常会导致用户与应用程序或其通知交互。如果FCM检测到它们没有检测到的模式,您的消息可能会被取消优先级。Android P引入了限制FCM高优先级消息数量的功能,这些消息可以发送到你的应用程序,而不会导致用户使用你的应用程序或查看通知。如果响应高优先级消息时,以用户可见的方式显示通知,则该消息不会使用您的应用程序备用存储桶配额

然后,在我的测试之后,下面的服务器代码解决了我的1加6的问题

        android: {
          priority: 'high',
        },
        apns: {
          headers: {
            'apns-priority': '10',
          },
        },
但请记住:


“高优先级消息通常会导致用户与您的应用程序或其通知进行交互。如果FCM检测到一种模式,则您的消息可能会被取消优先级。”因此,我们应该注意此优先级。似乎一些制造商(小米、Oppo、One Plus、华为等)已经定制了android固件。 基本上,如果你在“最近打开”屏幕上关闭一个应用程序,你就是在关闭后台进程。 不幸的是,使用自定义固件时,由于电池优化,应用程序无法自动重新启动。 这会导致延迟或阻止通知。 似乎无法通过编程禁用此函数性。所以,没有其他真正的解决方案比做一个自制的页面,向用户解释如何手动去激活电池优化。 这篇文章用比我更好的英语解释了整个过程。 但与此同时,查看firebase云消息文档:

高优先级。FCM尝试立即发送高优先级消息,允许FCM服务在必要时唤醒休眠设备,并运行一些有限的处理(包括非常有限的网络访问)。高优先级消息通常会导致用户与应用程序或其通知交互。如果FCM检测到它们没有检测到的模式,您的消息可能会被取消优先级。Android P引入了限制FCM高优先级消息数量的功能,这些消息可以发送到你的应用程序,而不会导致用户使用你的应用程序或查看通知。如果响应高优先级消息时,以用户可见的方式显示通知,则该消息不会使用您的应用程序备用存储桶配额

然后,在我的测试之后,下面的服务器代码解决了我的1加6的问题

        android: {
          priority: 'high',
        },
        apns: {
          headers: {
            'apns-priority': '10',
          },
        },
但请记住:


“高优先级消息通常会导致用户与您的应用程序或其通知进行交互。如果FCM检测到一种模式,则您的消息可能会被取消优先级。”因此,我们应该注意此优先级,我感谢回答我问题的人。最终对我起作用的是,将应用程序发布到google play st