当前位置:首页 > 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实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML…

js实现论坛

js实现论坛

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

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…