从 Java Web 应用程序发送推送通知

use*_*291 5 java push-notification firebase service-worker firebase-cloud-messaging

我有一个 Java Web 应用程序,需要向用户发送手动和自动通知。此通知应发送到用户的浏览器以及移动设备(iOS 和 Android)。我发现如果移动设备上没有运行本机应用程序,则无法直接向移动设备发送通知。所以我唯一的选择似乎是网络推送通知。我浏览了几篇文章,发现它很混乱。我不知道从哪里开始。

  1. 我可以直接从 Java 代码发送通知吗?还是我必须使用 FCM(Firebse)?如果是这样,我可以直接从 Java 代码调用 FCM,例如使用 Apache http 客户端库调用它吗?
  2. FCM、客户端的浏览器和我的应用程序如何连接?
  3. 我还发现服务工作者应该在后台运行以接收通知。如何将其与 Java 代码集成?

mik*_*nik 5

您可以不使用 FCM 直接发送它们,并且有几个可用的库,包括一个Java库。

不幸的是,iOS 目前不支持 Web Push。订阅您的服务是在设备级别而不是用户级别,因此如果我在桌面上注册,除非我在移动浏览器中再次注册,否则您无法向我的手机发送通知。

如果浏览器的实例正在运行,推送到 Android 的通知将显示,在现实世界中(无论如何,对我来说)Chrome 似乎总是在后台某处运行,所以我几乎实时地收到通知。缺点是网络推送通知直接进入通知栏,它们不会先在屏幕上弹出。

粗略的工作流程是这样的:

  • 用户访问您的页面,您加载 Service Worker 并检查网络推送功能,如果满意您可以请求发送通知的权限。

  • 如果用户授予权限,您将您的公钥传递给您的服务工作者为该用户创建订阅,这将返回一个端点和两个您需要向他们推送通知的密钥。

  • 您的 webpush 库作为服务器实例运行并负责所有加密和令牌处理,您可以配置它,但您喜欢发送消息,通常是为了响应 HTTP POST 请求,但这取决于您。
  • 在你的 service worker 中,你定义了一个事件处理程序来接收推送消息。这是您创建并向用户显示通知的地方,同样如何执行此操作取决于您。

您可以在通知的有效负载中传递参数并将它们用作您显示的通知中的变量,或者您可以硬编码值,您可以根据用户是否关注您的页面来指定不同的行为,您可以添加按钮和为它们设置不同的动作,在解雇时触发事件,自定义振动模式,替换或堆叠通知,访问现有通知中的数据等。所有这些都由您的服务工作者处理,仅接收通知什么都不做。

您的 service worker 只是一个用 javascript 编写的脚本,您可以从您的页面链接它。它在用户第一次访问时由浏览器加载和安装,然后在调用时独立运行。

Service Worker 非常强大。您还可以使用它们来实现复杂的缓存规则、离线时提供内容、在不同浏览器窗口之间推送数据等。服务工作者可以产生更多服务工作者,并且当它们在浏览器的主线程之外运行时,它们非常适合卸载 CPU密集的任务,而不会延迟页面的呈现。

最后一点要注意,您的站点必须通过 SSL 提供服务才能部署 Service Worker。


Fra*_*len 1

1) 这在一定程度上取决于发送消息的 Java 代码的运行位置。