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

如何在JavaScript(PWA)中为Android设备的FCM创建channel_ID?

解决方案

一、通过JavaScript实现通知通道创建+FCM请求适配

1. 调整FCM发送请求参数

你使用的是FCM legacy HTTP API,直接在notification字段中新增android_channel_id参数即可,示例代码如下:

const toSend ={
        notification:
        {
            title:"Video Call!",
            body:"Video call!",
            click_action: "...",
            sound: "default",
            vibrate: [200, 100, 200, 100, 200, 100, 200],
            android_channel_id: "video_call_notify" // 新增自定义通道ID
        },
        to:othermailandtoken[1]
        };

如果后续切换为FCM v1 API,需要将参数放在message.android.notification.channel_id层级下。

2. 前端预先创建通知通道

在PWA前端申请通知权限的逻辑后,新增通道创建逻辑,Android系统会自动识别Web通知的通道参数完成创建,示例代码如下:

// 申请通知权限后执行
if (Notification.permission === 'granted') {
  navigator.serviceWorker.ready.then(registration => {
    // 发送一条临时通知触发通道创建
    registration.showNotification('通道初始化', {
      body: '通知功能初始化完成',
      androidChannelId: 'video_call_notify',
      androidChannelName: '视频通话通知',
      androidChannelDescription: '用于接收视频呼叫提醒',
      sound: 'default',
      silent: true // 设为true避免初始化时发出提示音
    }).then(() => {
      // 立刻关闭临时通知
      registration.getNotifications().then(notifications => {
        notifications.forEach(n => n.close());
      });
    });
  });
}

只要首次运行触发过上述逻辑,系统就会生成对应的通知通道,后续FCM推送携带相同android_channel_id即可匹配到该通道,默认使用通道配置的提示音、震动规则。

二、替代方案(无需自定义通道)

你可以直接在PWA的manifest.json中配置默认通知通道,FCM未收到自定义channel ID时会自动使用该默认通道:

{
  "name": "你的PWA应用名",
  "short_name": "应用短名",
  "start_url": "/",
  "display": "standalone",
  "notifications": {
    "default_channel_id": "default_notify_channel",
    "default_channel_name": "默认通知",
    "default_channel_description": "应用默认通知通道"
  }
}

配置完成后确保FCM请求中的sound字段设为default,高版本Android系统就会自动调用默认提示音。

三、其他可能的故障诱因

  • 国产定制ROM权限限制:小米、华为、OPPO等品牌的Android系统会默认关闭第三方应用的通知提示音、震动二级权限,哪怕用户已经授权了主通知权限,该限制属于系统层规则,无法通过代码绕过,建议在应用内增加引导页提示用户手动开启相关权限。
  • 推送类型处理错误:如果发送的是FCM数据消息(仅带data字段无notification字段),需要在Service Worker的onPush事件中手动调用showNotification方法,且必须传入sound和通道参数才会触发提示音。
  • 系统拦截规则:设备省电模式、应用冷冻规则、系统通知管家类应用会拦截FCM推送的提示音,可引导用户将应用加入系统省电白名单、允许后台活动。
  • GMS服务异常:部分无内置GMS的国产设备、或GMS服务的通知权限被关闭时,也会出现推送无提示音的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:21:03