当前位置:首页 > JavaScript

js实现推送

2026-04-05 23:20:12JavaScript

使用Web Push API实现推送

Web Push API允许网页接收服务器推送的消息,即使网页未在前台运行或浏览器已关闭。实现步骤如下:

  1. 获取用户授权 需要先请求用户授权通知权限:

    Notification.requestPermission().then(permission => {
      if (permission === 'granted') {
        console.log('Notification permission granted.');
      }
    });
  2. 注册Service Worker Service Worker是推送功能的核心,需在独立文件中注册:

    js实现推送

    if ('serviceWorker' in navigator) {
      navigator.serviceWorker.register('/sw.js').then(registration => {
        return registration.pushManager.getSubscription();
      }).then(subscription => {
        if (!subscription) {
          return registration.pushManager.subscribe({
            userVisibleOnly: true,
            applicationServerKey: urlBase64ToUint8Array('YOUR_PUBLIC_VAPID_KEY')
          });
        }
        return subscription;
      }).then(subscription => {
        console.log('Push subscription:', subscription);
      });
    }
  3. 处理推送事件 在Service Worker文件(sw.js)中监听推送事件:

    self.addEventListener('push', event => {
      const payload = event.data ? event.data.text() : 'No payload';
      event.waitUntil(
        self.registration.showNotification('Push Notification', {
          body: payload,
          icon: '/icon.png'
        })
      );
    });
  4. 发送推送消息 服务器端需使用Web Push库(如web-push)发送通知:

    js实现推送

    const webpush = require('web-push');
    webpush.setVapidDetails(
      'mailto:contact@example.com',
      'YOUR_PUBLIC_VAPID_KEY',
      'YOUR_PRIVATE_VAPID_KEY'
    );
    
    const subscription = {/* 用户订阅对象 */};
    webpush.sendNotification(subscription, 'Your push message');

使用第三方推送服务

  1. Firebase Cloud Messaging (FCM) 适用于移动端和Web的跨平台推送方案:

    // 初始化
    firebase.initializeApp({
      apiKey: 'YOUR_API_KEY',
      messagingSenderId: 'YOUR_SENDER_ID'
    });
    
    const messaging = firebase.messaging();
    messaging.requestPermission().then(() => messaging.getToken())
      .then(token => console.log('FCM token:', token));
    
    // 接收消息
    messaging.onMessage(payload => {
      console.log('Message received:', payload);
    });
  2. OneSignal 提供完整的推送通知解决方案:

    // 初始化SDK
    window.OneSignal = window.OneSignal || [];
    OneSignal.push(function() {
      OneSignal.init({
        appId: "YOUR_APP_ID",
        safari_web_id: "YOUR_SAFARI_WEB_ID",
        notifyButton: { enable: true }
      });
    });
    
    // 检查订阅状态
    OneSignal.push(function() {
      OneSignal.isPushNotificationsEnabled(function(isEnabled) {
        if (isEnabled) console.log("Push notifications are enabled!");
      });
    });

注意事项

  • HTTPS要求:Web Push API仅适用于HTTPS网站(localhost除外)
  • 浏览器支持:检查目标浏览器是否支持相关API
  • VAPID密钥:Web Push需要生成VAPID密钥对
  • 用户交互:推送权限请求必须由用户交互触发
  • 配额限制:浏览器可能对推送频率有限制

调试技巧

  1. 使用Chrome DevTools的Application面板检查Service Worker状态
  2. 在DevTools的Application > Background Services中模拟推送事件
  3. 使用Postman或curl测试推送服务器接口
  4. 检查浏览器控制台和Service Worker日志中的错误信息

标签: js
分享给朋友:

相关文章

js实现分页

js实现分页

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

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…