如何使用 Next.js 在客户端完成推送通知

阅读时长 8 分钟读完

随着 Web 应用程序的普及,推送通知已成为现代 Web 开发的常见需求,为用户提供了一种更加智能、有针对性的信息服务方式。Next.js 是一款基于 React 的 SSR 框架,在使用服务端渲染的同时可以完成推送通知的功能。本文将介绍如何使用 Next.js 实现客户端的推送通知,并提供完整的示例代码。

前置知识

在学习本文之前,你需要了解以下知识点:

  • 基本的 Next.js 开发知识;
  • Web Push API 的基本原理;
  • 需要使用到的 Service Worker 和 PushManager 的基本使用方法;

实现流程

  1. 实现 Service Worker

服务工作线程(Service Worker)是一个可编程的网络代理,允许您控制网页的网络请求和响应。在 Next.js 中,您可以在 pages 目录下创建其名称为 service-worker.js 的文件,以实现 Service Worker 功能。Service Worker 的逻辑可通过 event 监听器实现以下功能:

  • 监听推送通知;
  • 打开推送通知;
  • 将推送通知添加到通知列表中;

基本的 Service Worker 代码如下所示:

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

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

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

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

此 Service Worker 的功能为监听推送通知,并将推送通知添加到通知列表中。

  1. 实现推送通知

推送通知需要通过 Web Push API 实现。Web Push API 需要在 HTTPS 协议的网站中使用。在业务代码中,您需要实现以下功能:

  • 检测浏览器是否支持推送通知;
  • 注册 Service Worker;
  • 通过 PushManager 的 getSubscription 方法获取当前推送通知的订阅状态;
  • 若用户未订阅通知,则用户需要获取允许推送通知的权限;
  • 向服务端发送订阅通知请求,从而获取用户的端点和密钥;
  • 将用户的端点和密钥保存至数据库中;
  • 用户订阅推送通知后,可通过已保存的端点向用户推送通知。

基本的推送通知代码如下所示:

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

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

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

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

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

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

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

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

此代码的功能为检测浏览器是否支持推送通知,若支持则自动订阅通知。

示例代码

本文提供了完整示例代码,从而方便初学者快速理解和掌握 Next.js 推送通知功能的实现过程。示例代码包含以下文件:

  • index.js:Next.js 的根目录文件;
  • service-worker.js:实现 Service Worker 功能;
  • push-notification/subscribe.js:订阅通知的 API。

index.js 文件的代码如下所示:

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

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

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

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

service-worker.js 文件的代码如下所示:

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

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

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

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

push-notification/subscribe.js 文件的代码如下所示:

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

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

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

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

总结

通过本文,您可以了解到如何使用 Next.js 实现客户端的 Web Push Notification 功能。若想更深入地了解 Web Push Notification 的实现原理,建议您查阅 Web Push API 的官方文档。此外,Web Push Notification 技术在 Web 和移动端的应用十分广泛,学好 Web Push Notification 技术对开发者而言是一项必要的技能。

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

纠错
反馈