当前位置:首页 > JavaScript

js实现app推送

2026-03-01 12:42:31JavaScript

使用 Firebase Cloud Messaging (FCM) 实现推送

Firebase Cloud Messaging (FCM) 是 Google 提供的跨平台消息推送服务,适用于 Web 和移动端。以下是在 JavaScript 中实现 FCM 推送的基本步骤。

注册 Firebase 项目并获取配置
在 Firebase 控制台创建新项目,进入项目设置获取 Web 应用的配置信息(如 apiKeyprojectId 等)。将 Firebase SDK 添加到 HTML 文件中:

<script src="https://www.gstatic.com/firebasejs/9.0.0/firebase-app-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/9.0.0/firebase-messaging-compat.js"></script>
<script>
  const firebaseConfig = {
    apiKey: "YOUR_API_KEY",
    projectId: "YOUR_PROJECT_ID",
    messagingSenderId: "YOUR_SENDER_ID",
    appId: "YOUR_APP_ID"
  };
  firebase.initializeApp(firebaseConfig);
</script>

请求通知权限并获取设备令牌
在用户交互(如按钮点击)后请求通知权限,成功后会生成设备令牌(Token),用于定向推送:

const messaging = firebase.messaging();
messaging.requestPermission()
  .then(() => messaging.getToken())
  .then(token => console.log("Device Token:", token))
  .catch(err => console.error("Permission denied:", err));

监听推送消息
通过 onMessage 监听前台消息,setBackgroundMessageHandler 处理后台消息:

js实现app推送

messaging.onMessage(payload => {
  console.log("Foreground message:", payload);
  new Notification(payload.notification.title, {
    body: payload.notification.body
  });
});

// 在Service Worker中注册后台处理
importScripts('https://www.gstatic.com/firebasejs/9.0.0/firebase-app-compat.js');
importScripts('https://www.gstatic.com/firebasejs/9.0.0/firebase-messaging-compat.js');
firebase.initializeApp(firebaseConfig);
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(payload => {
  return self.registration.showNotification(
    payload.notification.title,
    { body: payload.notification.body }
  );
});

使用 Service Worker 增强推送能力

Service Worker 是浏览器在后台运行的脚本,可拦截网络请求和推送事件。以下是注册和使用的关键代码。

注册 Service Worker
在项目根目录创建 firebase-messaging-sw.js 文件,并在主线程中注册:

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/firebase-messaging-sw.js')
    .then(registration => console.log("SW registered:", registration))
    .catch(err => console.error("SW registration failed:", err));
}

处理推送事件
在 Service Worker 中监听 push 事件,自定义通知行为:

js实现app推送

self.addEventListener('push', event => {
  const payload = event.data.json();
  event.waitUntil(
    self.registration.showNotification(payload.notification.title, {
      body: payload.notification.body,
      icon: payload.notification.icon
    })
  );
});

服务器端发送推送消息

通过 Firebase Admin SDK 或 HTTP 请求从服务器发送推送。以下是 Node.js 示例:

安装 Firebase Admin SDK

npm install firebase-admin

发送推送消息

const admin = require('firebase-admin');
const serviceAccount = require('./service-account-key.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

const message = {
  token: 'DEVICE_TOKEN', // 目标设备令牌
  notification: {
    title: '新消息',
    body: '您有一条未读通知'
  }
};

admin.messaging().send(message)
  .then(response => console.log('Success:', response))
  .catch(error => console.error('Error:', error));

注意事项

  • HTTPS 要求:Service Worker 和推送 API 仅在 HTTPS 或 localhost 环境下生效。
  • 令牌管理:设备令牌可能因用户清理缓存或重新安装应用而失效,需在服务器端更新。
  • 用户隐私:遵循 GDPR 等法规,确保用户明确同意接收推送。

通过以上方法,可实现完整的 JavaScript 应用推送功能,覆盖权限请求、消息接收和服务器发送等关键环节。

标签: jsapp
分享给朋友:

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…