在后台静默处理推送通知

时间:2016-04-22 12:31:12

标签: cordova background push-notification phonegap-plugins

我正在创建一个Phonegap应用程序 - 目前适用于Android - 使用Onesignal来处理推送通知。创建核心应用程序并不是太困难。在应用程序的上下文中,用户实际上不需要查看通知。

我需要的是能够在应用JavaScript中处理消息有效负载。如果我愿意等待用户点击通知图标,此时触发[notificationopenedcallback]事件并且我可以自由地执行我喜欢的有效负载,这不是问题。1

很好,但还不够。我需要做的是在通知到达时操纵JavaScript中的有效负载 - 而不是在用户单击通知图标时的某个时刻。

我不清楚这可以做到 - 也许是因为无法为已经背景的应用程序执行JS代码。如果确实如此,我可以通过编写原生应用来解决问题吗?

我很感激任何帮助。

2 个答案:

答案 0 :(得分:3)

免责声明:我刚刚在Cordova开发了一个插件,但是很久没有看到推送通知了。

无论如何,快速回答是在插件中实现推送通知。从JS调用插件并启动后台服务来监听和处理有效负载。

您可以通过编写包含从BroadcastReceiver中取消的类的插件来实现。您将在onReceive中处理传入通知。

至于其他插件,我有限的经验是你应该继续使用cordova框架。这意味着应该使用cordova添加OneSignal。我的基础是我使用支持V4插件,所以YMMV。

编辑:另一方面,如果您正在使用Google通知之类的标准,那么您可能不需要OneSignal。

我还没做的一件事就是在插件中生成一个包含Service和intent的清单。我实际上是在附加到插件的AAR中做到了这一点。因此,我不确定AAR清单是否会附加到主清单上。它可能应该,但我还没看过这个。如果是这种情况,您甚至不需要从JS调用本机代码。广播接收器将收到通知。否则,您需要从JS调用registerReceiver。

最后,我认为你是对的。如果应用程序在后台,它将停止并释放WebView等资源。这意味着JS将无法运行。

答案 1 :(得分:2)

如果您希望在推送时能够可靠地处理推送通知,我认为您必须编写原生Android应用。

我一直在使用phonegap-plugin-push处理我的Cordova应用中的推送通知,并且它目前在新接收的推送通知的所有情况下都不会唤醒应用程序。请参阅此问题#806

出于我的目的(非关键),我依靠用户点击通知以在任何情况下唤醒应用程序。关于phonegap-plugin-push的好处是它支持iOS,Android和Windows,以防您希望将来支持其他平台。