You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web应用中如何获取设备ID以通过FCM发送推送通知?

Web应用通过FCM接收通知时获取设备/浏览器唯一标识的方法

在Web环境中,并没有像安卓系统那样官方提供的固定deviceId,但可以通过以下几种方式获取适配FCM推送场景的唯一标识:

1. 使用FCM推送令牌(Push Token)作为核心标识

这是Web推送场景下最适配的“设备/会话唯一标识”,FCM会为每个授权的浏览器实例生成唯一令牌,后端可直接用它定向发送通知。

  • 获取流程:
    1. 先请求用户的通知权限:
      const permission = await Notification.requestPermission();
      
    2. 权限通过后,调用FCM SDK的getToken()方法获取令牌:
      import { getToken } from "firebase/messaging";
      import { messaging } from "./firebase-init"; // 已初始化的FCM实例
      
      async function fetchFCMPushToken() {
        if (await Notification.requestPermission() === "granted") {
          const token = await getToken(messaging, { vapidKey: "你的VAPID公钥" });
          if (token) {
            // 将令牌发送到后端存储
            console.log("FCM推送令牌:", token);
          }
        }
      }
      
  • 注意:令牌可能因用户清除浏览器数据、更换浏览器、重新授权通知等情况变更,后端需实现令牌的更新与失效处理逻辑。

2. 浏览器指纹作为补充标识

若需要更偏向设备级的标识(无绝对永久唯一),可生成浏览器指纹,需注意隐私合规(如GDPR):

  • 可结合浏览器UA、屏幕分辨率、时区、语言、硬件核心数等信息,哈希后生成指纹:
    async function generateBrowserFingerprint() {
      const fingerprintElements = [
        navigator.userAgent,
        navigator.language,
        `${screen.width}x${screen.height}`,
        Intl.DateTimeFormat().resolvedOptions().timeZone,
        navigator.hardwareConcurrency
      ].join("|");
      
      const hashBuffer = await crypto.subtle.digest(
        "SHA-256",
        new TextEncoder().encode(fingerprintElements)
      );
      return Array.from(new Uint8Array(hashBuffer))
        .map(b => b.toString(16).padStart(2, "0"))
        .join("");
    }
    
  • 注意:指纹并非绝对唯一,设备设置或浏览器版本更新可能改变指纹,且需确保用户知晓数据收集行为。

3. 绑定用户身份标识(推荐)

如果Web应用有用户登录系统,将FCM令牌与用户ID绑定是最可靠的方案:

  • 用户登录后,将当前FCM令牌与用户ID一同发送到后端,后端维护「用户ID - 推送令牌」的映射关系;
  • 发送通知时,通过用户ID匹配对应的令牌,即使令牌变更,也可通过用户身份关联最新令牌。

内容的提问来源于stack exchange,提问作者amir tbi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:22:08