使用 Vue 开发的 PWA 应用如何实现本地推送

面试官:小伙子,你的代码为什么这么丝滑?

PWA (Progressive Web Apps) 是一种逐步增强式的 web 应用程序,它结合了 web 应用程序和原生移动应用程序的优点。随着 web 技术的不断发展,PWA 的性能和功能已经越来越接近于原生应用了。其中,推送通知是 PWA 中非常重要的一个功能,它可以让用户在不打开应用程序的情况下获得最新的信息和提醒。

在本文中,我们将介绍如何使用 Vue.js 开发 PWA 应用并实现本地推送功能。本文主要包括以下内容:

  1. PWA 的基础知识
  2. 使用 Workbox 管理 service worker
  3. 使用 web-push 库实现推送
  4. 实现本地推送

PWA 的基础知识

在介绍如何实现本地推送之前,我们先来了解一些 PWA 的基础知识。PWA 的主要特点包括:

  1. 可靠性:PWA 能够在离线状态下运行,并且能够快速响应。这是因为 PWA 可以使用 service worker 来缓存应用程序的资源和数据,并能够在用户离线时提供离线数据和页面。
  2. 快速加载:PWA 的性能非常好,因为它可以使用缓存技术来加速应用程序的加载速度,并且可以在后台预加载应用程序的资源。
  3. 能够接收推送通知:PWA 可以使用推送 API 来让应用程序接收来自服务器的推送通知,不需要用户打开应用程序。
  4. 安装性:PWA 能够像原生应用程序一样安装到设备上,可以通过桌面图标或应用商店快速访问。

使用 Workbox 管理 service worker

在 PWA 中,service worker 起着非常重要的作用,它负责缓存应用程序的资源和数据,并在用户离线时提供离线数据和页面。Workbox 是 Google 推出的一个用于管理 service worker 的库,它简化了 service worker 基础代码的编写和管理。下面我们来看一下如何使用 Workbox。

先在项目中安装 Workbox:

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

然后在项目根目录下创建一个名为 workbox-config.js 的文件,用来配置 Workbox:

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

配置项的意义如下:

  • globDirectory:缓存文件所在的目录。
  • globPatterns:需要缓存的文件,这里我们缓存了 html、js、css 和 json 格式的文件。
  • swDest:生成的 service worker 文件的路径。
  • swSrc:用于生成 service worker 的文件路径。
  • clientsClaim:表示在 service worker 安装后立即接管所有页面,即使这些页面还没有被之前安装的旧的 service worker 接管。
  • skipWaiting:表示在 service worker 安装后立即激活新的 service worker,而不用等到旧的 service worker 完全停止。

在项目根目录下创建名为 sw.js 的文件,用于编写 service worker 的逻辑代码:

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

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

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

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

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

上面的代码中有两个重要的方法,precacheAndRouteregisterRouteprecacheAndRoute 会将设置的文件加入缓存列表并自动注册 service worker,registerRoute 可以拦截不同的资源请求并映射到不同的缓存策略。

这样就完成了 Workbox 的配置,我们只需要在应用程序中引入生成的 service worker 文件即可:

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

这里使用 navigator.serviceWorker.register 方法注册 service worker。

使用 web-push 库实现推送

在 PWA 中实现推送功能需要用到 Push API。在前端应用程序中,我们使用 web-push 库来简化实现。web-push 库提供了一个轻量级的方法,以通过需要服务端直接使用的 HTTP/2 Push 协议来发送通知。

首先,需要创建一个 Vapid key 对象。Vapid 用于客户端请求和服务端之间的身份验证,是一个公钥和私钥的组合,用于服务端签署和加密消息。可以使用 web-push 命令行工具来生成 Vapid key,将生成的两个 key 分别赋值给客户端和服务端。

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

上面的命令将生成包含公钥和私钥的 JSON 对象。我们需要将这些数据存储在应用程序中以供后续使用。在客户端代码中,将公钥传递到订阅方法中:

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

在服务端代码中,将私钥传递到 web-push 库的 sendNotification 方法中。这样服务端就可以使用 Vapid 方式和客户端通信并实现推送功能了。

实现本地推送

在前面的内容中,我们已经介绍了 PWA、service worker 和 web-push 的相关知识。接下来,我们来实现本地推送的功能。

首先,我们需要在 service worker 中监听 push 事件,当有推送通知时触发该事件:

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

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

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

push 事件中,我们可以使用 showNotification 方法来显示推送通知。这里我们设置了通知的标题和内容。

在客户端中,我们需要使用 Notification API 来请求推送权限并生成本地推送:

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

注意,要在用户允许通知权限的情况下才能显示推送。

结论

本文介绍了如何使用 Vue.js 开发 PWA 应用并实现本地推送功能。我们介绍了 PWA 的基础知识、使用 Workbox 管理 service worker、使用 web-push 库实现推送和实现本地推送的方法。希望本文对大家有所帮助,能够加深对 PWA 的了解和使用。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/670a3e5bd91dce0dc87fe0a4


猜你喜欢

  • Deno 中如何进行调试

    前言 Deno 是一个近期比较火热的 JavaScript / TypeScript 运行环境,它通过 V8 引擎执行代码,和 Node.js 不同,Deno 采用了安全沙箱机制,脱离 npm,不再需...

    8 天前
  • 制作你自己的 Web Components

    Web Components 是一项开放式的 web 技术,旨在让开发者创建可重用的组件。它们是基于新的 web 标准,包括 HTML5 和 CSS3 等,并使用 JavaScript 编写。

    8 天前
  • MongoDB 对查询操作的解析

    MongoDB是一款流行的NoSQL数据库,其中查询操作是其最重要的功能之一。无论您是新手还是经验丰富的前端开发人员,对MongoDB查询的深刻理解都对您的工作具有指导性和帮助。

    8 天前
  • PM2 文档翻译:从入门到精通的全网最全教程

    前言 在现代化的 Web 开发中, PM2 作为 Node.js 进程管理器,可以极大地提高我们的开发效率。这篇文章将介绍 PM2 的安装、使用以及高级特性,帮助你从入门到精通,成为一名优秀的前端开发...

    8 天前
  • 解决响应式设计中的水平滚动条问题

    作为前端开发人员,响应式设计是我们必须要掌握的技术之一。然而,在实际的项目中,我们经常会遇到一些响应式设计中的问题,比如水平滚动条问题。在本文中,我会详细介绍什么是水平滚动条问题以及如何解决它。

    8 天前
  • 使用 SASS 进行 CSS 模块化开发的最佳实践

    CSS 是网页设计中不可或缺的一部分,但是随着项目规模的增大,CSS 的代码也变得越来越复杂和混乱。为此,开发者们开始寻找更好的方法来组织和管理他们的 CSS 代码。

    8 天前
  • Docker 容器编组(Container Grouping)探讨

    Docker 容器是一种轻量级的虚拟化技术,可快速构建、部署和运行应用程序。由于它的轻量级、可移植性和易配置性等优点,Docker 已经成为开发、测试和部署应用程序的首选技术。

    8 天前
  • 如何使用 LESS 实现多行文本溢出显示省略号

    前端开发中经常会遇到需要对文本进行截断处理的情况,比如当一个包含多行文本的容器不足以显示所有文本时,需要将超出容器范围的文本进行截断并显示省略号。在本文中,我们将介绍如何使用 LESS(一种 CSS ...

    8 天前
  • 利用 koa2-session 实现用户会话管理

    在 Web 应用程序开发中,会话管理是一个至关重要的方面。当用户通过浏览器访问网站时,服务器会开启一个会话来跟踪用户的状态。会话可以存储用户的信息,例如登录状态、购物车中的商品等等。

    8 天前
  • CSS Reset 出现 “Default value for anonymous function” 的解决办法

    近年来,Web开发技术发展迅速,前端技术也越来越丰富。在实际开发中,CSS Reset是前端开发中必不可少的一项技术。CSS Reset能够重置不同浏览器对各个元素的默认样式,方便开发者实现自定义样式...

    8 天前
  • 如何处理 AngularJS 中的 404 页面?

    在使用 AngularJS 开发前端应用程序时,有时会遇到页面无法找到的情况。此时,服务器将返回 404 错误页面,而对于单页应用而言,我们需要在客户端进行处理。本文将介绍如何在 AngularJS ...

    8 天前
  • 如何打造一个高性能的响应式网站

    随着移动设备的普及,越来越多的用户倾向于使用手机和平板电脑来访问网站,这也意味着我们需要打造一个高性能的响应式网站来满足用户需求。在本文中,我们将深入讨论如何打造一个高性能的响应式网站,包括优化网站速...

    8 天前
  • PWA 应用中的横竖屏适配方案

    在许多 PWA 应用中,横竖屏的适配问题是一个不可忽视的问题。不同的设备可能具有不同的显示方向,因此,为了提高用户的体验和应用的稳定性,我们必须对不同的屏幕方向进行适配。

    8 天前
  • Jest 的断言函数及其使用

    前言 在前端开发中,我们需要进行大量的测试工作来保证代码的质量。而 Jest 则是一个流行的 JavaScript 测试框架,用于在控制台执行测试并生成详细的测试报告。

    8 天前
  • Material Design 中对监听菜单 delete 的实现方式

    Material Design 是 Google 推出的一套全新的设计风格。它提供了一些规范的 UI 组件和样式,使得 web 开发者们能够快速搭建具有 Material Design 风格的界面。

    8 天前
  • Serverless: 如何迅速构建并发布 Lambda 函数

    Serverless 是一种无服务器的架构模型,是一种新型的云计算服务模式。借助 Serverless,开发者可以快速构建并发布 Lambda 函数来处理特定的业务场景,而不需要考虑服务器的扩容、维护...

    8 天前
  • ES10 中新增的可选捕获组

    随着 JavaScript 语言的不断发展,它的表达力和功能也不断地扩展和提升。ES10 中新增的可选捕获组就是其中之一,它为开发者提供了更便捷的处理字符串的方式。

    8 天前
  • 如何增加 RESTful API 的稳定性和可靠性

    RESTful API 是一种常见的网络应用程序接口,具有很高的可扩展性和互操作性。然而,由于网络不稳定、客户请求不可预测和服务器端资源限制等原因,RESTful API 也经常面临着稳定性和可靠性的...

    8 天前
  • Redux 中的数据更新问题及解决方案

    随着前端应用程序的复杂性越来越高,数据的管理和维护也变得越来越困难。Redux 是一个流行的数据管理库,可以让你方便地管理应用程序的数据流。然而,如果你不小心处理数据更新,将会遇到一些常见的问题。

    8 天前
  • Hapi.js 的路由管理及优化技巧

    随着现代化 Web 应用程序的发展,服务器端应用程序越来越复杂。在处理客户端请求时,有效的路由管理和优化技巧是一个不可或缺的组成部分。Hapi.js 是一个功能强大的 Node.js Framewor...

    8 天前

相关推荐

    暂无文章