当前位置:首页 > 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是推送功能的核心,需在独立文件中注册:

    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)发送通知:

    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 提供完整的推送通知解决方案:

    js实现推送

    // 初始化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实现复制

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

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…