当前位置:首页 > 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方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获…

vue app 实现

vue app 实现

Vue App 实现方法 创建 Vue 项目 使用 Vue CLI 创建新项目,运行以下命令: npm install -g @vue/cli vue create my-vue-app cd my…