在 Hapi.js 中实现 Web 推送通知

阅读时长 7 分钟读完

简介

Web 推送通知是一种基于浏览器的推送技术,可以让网站向用户发送消息而无需打开网站。这项技术基于 W3C 标准,目前主流的浏览器都已经支持这一功能。本文将介绍如何在 Hapi.js 中实现 Web 推送通知。

实现步骤

步骤一:获取订阅信息

Web 推送通知需要先获取用户的订阅信息,才能向用户发送消息。获取订阅信息的过程分为以下几步:

  1. 使用 serviceWorker.register() 方法注册 service worker。
  2. 在 service worker 中监听 pushManager.subscribe() 方法,获取订阅信息。
  3. 将订阅信息发送至服务器,保存在数据库中。

步骤二:向客户端发送消息

获取用户订阅信息后,我们就可以向客户端发送消息了。发送消息的过程分为以下几步:

  1. 在服务器端生成消息。
  2. 使用 web-push 模块将消息发送至客户端。
  3. 客户端接收到消息后,触发 service worker 中的 push 事件。
  4. 在 push 事件中展示消息。

代码实现

服务器端代码

安装 web-push 和 hapi 模块:

生成 VAPID 公钥和私钥:

VAPID(Voluntary Application Server Identification)是一种基于 HTTP 的消息提示协议,是 Web 推送通知的一种安全机制,用于保护消息的发送和接收。在 Web 推送服务端,需要使用 VAPID 认证来确保消息的来源和安全性。

在服务器端代码中,定义路由和控制器:

-- -------------------- ---- -------
----- ---- - ----------------
----- ------- - --------------------
----- ------ - --- ------------- ----- ---- ---

----- --------- - -
    ---------- ------------------
    ----------- ------------------
--
------------------------
    --------------------------------
    --------------------
    --------------------
--

--------------
    ------- -------
    ----- -------------
    -------- ---------- -- -- -
        ----- ------------ - -------------------------
        -- ---- ------------ -- --------
        ------ ------------- -------
    -
---

--------------
    ------- -------
    ----- --------
    -------- ---------- -- -- -
        ----- ------- - ----------------
            ------ ---- ---- ------
            ----- ----- -- - --- ---- ---- ---------
            ---- ---------------------
        ---
        ----- ------- - -
            ---- ---------------
        --
        -- --- ------------- ---- --------
        ----- ------------- - --
            ----------- ------------------------------------------
            ----------------- -----
            ------- -
                --------- ------
                ------- -----
            -
        ---
        --- ---- ------------ -- -------------- -
            --- -
                ----- -------------------------------------- -------- ---------
            - ----- ------- -
                ---------------------
            -
        -
        ------ --------- ------
    -
---

---------------

客户端代码

在客户端代码中,先注册 service worker,然后在 service worker 中监听 pushManager.subscribe() 方法获取订阅信息,并将订阅信息发送至服务器。

-- -------------------- ---- -------
-- ---------------- -- ---------- -
    ---------------------------------------------------------------------------------- -
        -- --------- --- ---- -------------
        ------------------------------------
            ---------------- -----
            --------------------- ------ -- ------ --- ---- ------
        ------------------------------ -
            -- ---- ------------ -- ------
            ------------------- -
                ------- -------
                ----- ---------------- ------------- ------------ ---
                -------- -
                    --------------- ------------------
                -
            ---
        ---
    ---
-

在 service worker 中,监听 push 事件,接收消息。

-- -------------------- ---- -------
----------------------------- --------------- -
    ------------------------------------------------------- ---- ------ -
        ----- ----- -- - --- ---- ---- ---------
        ----- ------------
        ----- - ---- --------------------- -
    ----
---

------------------------------------------ --------------- -
    ---------------------------
    ----------------
        -----------------------------------------------
    --
---

总结

实现 Web 推送通知并不复杂,只需要遵循一定的流程即可。在 Hapi.js 中,我们可以使用 web-push 模块来实现服务器端的推送功能,同时使用 service worker 实现客户端的消息接收和展示。

此外,在使用 Web 推送通知时,一定要注意安全性问题,确保消息的来源和接收都是可信的,避免被恶意攻击。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645f64cd968c7c53b016b734

纠错
反馈