我正在创建一个 Phonegap 应用程序 - 目前用于 Android - 使用 Onesignal 处理推送通知。创建核心应用程序并不太困难。在应用程序的上下文中,用户实际上不需要查看通知。
我需要的是能够在应用程序 JavaScript 中处理消息有效负载。如果我愿意等待用户单击通知图标,此时 [notificationopenedcallback] 事件被触发,并且我可以自由地对有效负载做我喜欢的事情,那么这不是问题(请参阅 documentation )。
不错,但还不够。我需要做的是在通知到达时在 JavaScript 中操作有效负载 - 而不是在用户单击通知图标时的某个时间点。
我不清楚这是否可以完成 - 可能是因为没有办法为已经后台运行的应用程序执行 JS 代码。如果确实如此,我是否可以通过编写 native 应用程序以某种方式解决这个问题?
最佳答案
免责声明:我刚刚在 Cordova 中开发了一个插件,但已经很久没有看过推送通知了。
无论如何,快速的答案是在插件中实现推送通知。从JS调用插件并启动后台服务来监听和处理payload。
您可以通过编写一个包含从 BroadcastReceiver 派生的类的插件来做到这一点。您将在 onReceive 中处理传入的通知。
至于其他插件,我有限的经验是你应该继续使用cordova框架。这意味着应使用cordova 添加OneSignal。我基于我对支持 V4 插件的使用,所以 YMMV。
编辑:另一方面,再想一想,如果您使用的是 Google 通知等标准内容,则可能不需要 OneSignal。
我还没有做的一件事是在插件中生成一个带有服务和意图的 list 。我实际上是在附加到插件的 AAR 中完成的。所以我不确定 AAR list 是否会附加到主 list 。应该可以,但我没看过。如果是这种情况,您甚至不需要从 JS 调用 native 代码。广播接收器将收到通知。否则,您需要从 JS 调用 registerReceiver。
最后,我认为你是对的。如果应用程序在后台,它会停止并释放 WebView 等资源。这意味着 JS 将不会运行。
关于cordova - 在后台默默处理推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36793934/