【问题标题】:Sending push Notifications from Java Web Application从 Java Web 应用程序发送推送通知
【发布时间】:2018-07-06 02:22:42
【问题描述】:
我有一个需要向用户发送手动和自动通知的 Java Web 应用程序。
此通知应发送到用户的浏览器以及移动设备(iOS 和 Android)。
我发现如果移动设备上没有运行本机应用程序,则无法直接向移动设备发送通知。所以我唯一的选择似乎是网络推送通知。我浏览了几篇文章,发现它非常混乱。我不知道从哪里开始。
- 我可以直接从 Java 代码发送通知吗?还是我必须使用 FCM(Firebse)?如果可以,我可以直接从 Java 代码调用 FCM,例如使用 Apache http 客户端库调用它吗?
- FCM、客户端浏览器和我的应用程序如何连接?
- 我还发现服务工作者应该在后台运行以接收通知。如何将它与 Java 代码集成?
【问题讨论】:
标签:
java
firebase
push-notification
firebase-cloud-messaging
service-worker
【解决方案1】:
1) 这在一定程度上取决于发送消息的 Java 代码的运行位置。
【解决方案2】:
您可以不使用 FCM 直接发送它们,并且有几个可用的库,包括 Java 一个。
很遗憾,iOS 目前不支持 Web Push。订阅您的服务是在设备级别而不是按用户,所以如果我在我的桌面上注册,除非我在我的移动浏览器中再次注册,否则您无法向我的手机发送通知。
如果浏览器实例正在运行,则推送到 Android 的通知将显示,在现实世界中(无论如何对我而言)Chrome 似乎总是在后台某处运行,因此我几乎可以实时收到通知。缺点是网络推送通知直接进入通知栏,它们不会首先在屏幕上弹出。
大致的工作流程是这样的:
您可以在通知的有效负载中传递参数并将它们用作您显示的通知中的变量,或者您可以硬编码值,您可以根据用户是否关注您的页面来指定不同的行为,您可以添加按钮并为它们设置不同的操作,在解雇时触发事件,自定义振动模式,替换或堆叠通知,访问现有通知中的数据等。所有这些都由您的服务人员处理,仅接收通知在全部。
您的服务工作者只是一个用 javascript 编写的脚本,您可以从您的页面链接到该脚本。它在用户第一次访问时由浏览器加载并安装,然后在调用时独立运行。
Service Worker 非常强大。您还可以使用它们来实现复杂的缓存规则,在离线时提供内容,在不同的浏览器窗口之间推送数据等。服务工作者可以产生更多的服务工作者,并且当它们在浏览器的主线程之外运行时,它们是卸载 cpu 的理想选择在不延迟页面呈现的情况下完成密集任务。
最后一点要注意,您的网站必须通过 SSL 提供服务才能部署服务工作者。