在后台静默处理推送通知
Silently handling push notifications in the background
我正在创建一个 Phonegap 应用程序 - 目前用于 Android - 它使用 Onesignal 来处理推送通知。创建核心应用程序并不太困难。在应用程序的上下文中,用户确实不需要查看通知。
我需要的是能够处理应用程序中的消息负载 JavaScript。如果我愿意等待用户单击通知图标,此时 [notificationopenedcallback] 事件被触发,并且我可以自由地使用有效载荷做我喜欢的事情,这不是问题(参见 documentation)。
不错,但还不够。我需要做的是在通知到达时在 JavaScript 中操作负载 - 而不是在将来用户单击通知图标时的某个时间点。
我不清楚这是否可以完成 - 可能是因为没有办法为已后台运行的应用程序执行 JS 代码。如果确实如此,我可以通过编写本机应用程序以某种方式解决这个问题吗?
免责声明:我刚刚在 Cordova 中开发了一个插件,但很久没有查看推送通知了。
无论如何,快速的答案是在插件中实现推送通知。从 JS 调用插件并启动后台服务来监听和处理负载。
您可以通过编写一个包含从 BroadcastReceiver 派生的 class 的插件来做到这一点。您将在 onReceive 中处理传入通知。
至于其他插件,我的有限经验是,你应该继续使用cordova框架。这意味着应该使用 cordova 添加 OneSignal。我基于我对支持 V4 插件的使用,所以 YMMV。
编辑:另一方面,再三考虑,如果您使用的是 Google 通知之类的标准,您可能不需要 OneSignal。
我还没有做的一件事是在插件中生成带有服务和意图的清单。我实际上是在附加到插件的 AAR 中执行此操作的。所以我不确定 AAR 清单是否会附加到主清单。它可能应该,但我没有看过这个。如果是这种情况,您甚至不需要从 JS 调用本机代码。广播接收器将收到通知。否则,您将需要从 JS 调用 registerReceiver。
最后,我认为你是对的。如果应用程序在后台,它会停止并释放 WebView 等资源。这意味着 JS 不会 运行.
我认为如果您想在推送通知到达时可靠地处理它们,则必须编写一个本机 Android 应用程序。
我一直在使用phonegap-plugin-push to handle push notifications in my Cordova app and it does not currently wake up the application under all circumstances on newly received push notifications. See for example this issue #806
为了我的目的(非关键),我依靠用户在所有情况下点击通知来唤醒应用程序。 phonegap-plugin-push 的好处是它支持 iOS、Android 和 Windows,以防您将来想支持其他平台。
我正在创建一个 Phonegap 应用程序 - 目前用于 Android - 它使用 Onesignal 来处理推送通知。创建核心应用程序并不太困难。在应用程序的上下文中,用户确实不需要查看通知。
我需要的是能够处理应用程序中的消息负载 JavaScript。如果我愿意等待用户单击通知图标,此时 [notificationopenedcallback] 事件被触发,并且我可以自由地使用有效载荷做我喜欢的事情,这不是问题(参见 documentation)。
不错,但还不够。我需要做的是在通知到达时在 JavaScript 中操作负载 - 而不是在将来用户单击通知图标时的某个时间点。
我不清楚这是否可以完成 - 可能是因为没有办法为已后台运行的应用程序执行 JS 代码。如果确实如此,我可以通过编写本机应用程序以某种方式解决这个问题吗?
免责声明:我刚刚在 Cordova 中开发了一个插件,但很久没有查看推送通知了。
无论如何,快速的答案是在插件中实现推送通知。从 JS 调用插件并启动后台服务来监听和处理负载。
您可以通过编写一个包含从 BroadcastReceiver 派生的 class 的插件来做到这一点。您将在 onReceive 中处理传入通知。
至于其他插件,我的有限经验是,你应该继续使用cordova框架。这意味着应该使用 cordova 添加 OneSignal。我基于我对支持 V4 插件的使用,所以 YMMV。
编辑:另一方面,再三考虑,如果您使用的是 Google 通知之类的标准,您可能不需要 OneSignal。
我还没有做的一件事是在插件中生成带有服务和意图的清单。我实际上是在附加到插件的 AAR 中执行此操作的。所以我不确定 AAR 清单是否会附加到主清单。它可能应该,但我没有看过这个。如果是这种情况,您甚至不需要从 JS 调用本机代码。广播接收器将收到通知。否则,您将需要从 JS 调用 registerReceiver。
最后,我认为你是对的。如果应用程序在后台,它会停止并释放 WebView 等资源。这意味着 JS 不会 运行.
我认为如果您想在推送通知到达时可靠地处理它们,则必须编写一个本机 Android 应用程序。
我一直在使用phonegap-plugin-push to handle push notifications in my Cordova app and it does not currently wake up the application under all circumstances on newly received push notifications. See for example this issue #806
为了我的目的(非关键),我依靠用户在所有情况下点击通知来唤醒应用程序。 phonegap-plugin-push 的好处是它支持 iOS、Android 和 Windows,以防您将来想支持其他平台。