仅接收来自 GCM 的最后一个后台静默推送通知

Posted

技术标签:

【中文标题】仅接收来自 GCM 的最后一个后台静默推送通知【英文标题】:Receiving only the last background silent push notification from GCM 【发布时间】:2016-08-10 12:56:06 【问题描述】:

我正在开发一个接收推送通知的 Ionic 2 应用程序。它必须接收静默背景通知,这意味着通知在系统通知区域中不可见。相反,当应用程序打开时,通知会发送到应用程序,然后它会处理接收到的数据。它可以正常工作,只是它只接收应用关闭时发送的最后一条通知。

可能是缺少 GCM 消息配置。

预期行为

接收多个后台静默推送通知。

实际行为

只接收最后一个后台推送静默通知。

重现场景(包括但不限于)

重现步骤

在应用关闭时发送两条或更多条无声后台消息。 打开应用程序。 on receive 只收到最后一个通知 听众。

平台和版本

android 5.1.1/6.0

(Android) 什么设备供应商

谷歌

Cordova CLI 版本和cordova 平台版本

cordova --version 6.2.0 科尔多瓦

平台版本android 5.1.1

插件版本

cordova 插件版本 | grep phonegap-plugin-push 1.7.4

样本推送数据负载

                "delay_while_idle": true,
                "priority": "high",

                "data": 
                    "content-available": "1",                   
                    "notId": Date.now(),
                    "silenttitle": 'some title',
                    "silentmessage": 'some message'
                

我如何才能收到发送到我的应用程序的所有静默通知?

【问题讨论】:

您如何检查是否收到消息?您是否期望有日志消息?另外,如果您发送 3 条消息而只收到最后一条,会发生什么情况? 是的。我实现了一个通知监听器。当我打开应用程序时,它只接收并记录应用程序关闭时发送的最后一条静默消息。如果应用程序打开,我会收到所有无声消息。它还将消息保存在数据库中并向用户显示。 我不确定从 ionic 到 GCM 的最终有效负载是什么样的,但是如果优先级很高,则应始终将数据消息传递到设备。我认为您需要一位离子专家来解决这个问题。 【参考方案1】:

基于此SO question,在某些情况下,静默通知可能不会发送到设备。例如,如果开启了飞行模式,在将其关闭后,您将不会收到所有丢失的通知,而只会收到最后一个。在大多数情况下,将发送带有正文和内容可用的推送通知。

我还在这个blog 中看到收到了一些通知,但不是全部。如果您同时发送多个推送通知,通常只会收到几个。这是预期的行为。 APNS 为每个带有推送应用程序的设备维护一个 QoS(服务质量)队列。这个队列的大小是 1,所以如果你发送多个通知,最后一个通知会被覆盖。

希望这会有所帮助!

【讨论】:

【参考方案2】:

https://github.com/firebase/quickstart-android/tree/master/messaging 试试这个。我使用它,我能够接收推送通知。

【讨论】:

我可以使用 GCM 接收推送通知。当应用程序处于后台时,我无法接收发送的多个静默通知。不幸的是,考虑到我使用推送 Amazon SNS 的事实,Firebase 现在不是替代方案。

以上是关于仅接收来自 GCM 的最后一个后台静默推送通知的主要内容,如果未能解决你的问题,请参考以下文章

GCM 推送通知仅适用于调试 apk

GCM webpush 在后台

在后台接收静默推送时无法向 Alamofire 发出请求

当应用程序未运行时,通过静默推送通知在后台更新本地数据库

应用程序处于非活动状态时无法接收静默通知 iOS

为啥 GCM 推送通知会重复?