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

基于Node.js与Flutter的FCM语音/视频通话通知实现方案

在Node.js中通过FCM发送带铃声的长时长通话通知

1. 依赖选择与安装

官方推荐使用firebase-admin SDK实现FCM消息发送,稳定性更有保障。执行以下命令安装依赖:

npm install firebase-admin

2. 初始化FCM SDK

先从Firebase控制台下载项目的服务账号密钥(JSON格式),再完成SDK初始化:

const admin = require('firebase-admin');
const serviceAccount = require('./path/to/your-service-account-key.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: 'https://your-firebase-project-id.firebaseio.com'
});

3. 构造并发送通话通知

通话通知需要高优先级、自定义铃声,且要实现长时长持续显示(无法被用户手动划除),以下是完整的消息构造与发送代码:

async function sendIncomingCallNotification(deviceToken) {
  const callMessage = {
    token: deviceToken,
    // 基础通知内容
    notification: {
      title: '来电提醒',
      body: '张三正在呼叫你'
    },
    // Android平台专属配置
    android: {
      priority: 'high', // 高优先级确保通知及时送达
      notification: {
        channelId: 'incoming_call_channel', // 需在Android客户端提前创建该通知通道
        sound: 'call_ringtone.mp3', // 自定义铃声文件(放在Android项目res/raw目录)
        ongoing: true, // 标记为持续通知,无法手动清除
        sticky: true,
        priority: 'MAX'
      }
    },
    // iOS平台专属配置
    apns: {
      payload: {
        aps: {
          sound: 'call_ringtone.wav', // iOS项目中的铃声文件
          contentAvailable: true,
          category: 'INCOMING_CALL' // 需在iOS客户端配置对应通知类别
        }
      },
      headers: {
        'apns-priority': '5', // 高优先级
        'apns-push-type': 'alert'
      }
    },
    // 附加业务数据,供客户端处理通话逻辑
    data: {
      callId: 'CALL_20240520_001',
      callerId: 'user_123',
      callerName: '张三',
      callType: 'voice'
    }
  };

  try {
    const sendResult = await admin.messaging().send(callMessage);
    console.log('通话通知发送成功:', sendResult);
  } catch (err) {
    console.error('通话通知发送失败:', err);
  }
}

// 调用示例:传入目标设备的FCM令牌
sendIncomingCallNotification('USER_DEVICE_FCM_TOKEN');

关键注意事项

  • Android客户端通道配置:必须提前在Android客户端创建incoming_call_channel通知通道,设置通道铃声、优先级为HIGH,否则自定义铃声和高优先级不生效。
  • iOS客户端类别配置:需在iOS客户端注册INCOMING_CALL通知类别,关联接听/挂断等操作,同时确保铃声文件已正确添加到项目中。
  • 长时长实现逻辑:Android通过ongoing: true让通知持续显示,直到通话结束后由客户端主动取消;iOS若为VoIP通话,推荐使用APNS的VoIP推送(比普通FCM更可靠),并通过后台逻辑维持通知活跃。
  • 权限要求:Android 13及以上版本,客户端需主动申请POST_NOTIFICATIONS权限;iOS需开启通知权限,并配置正确的后台模式。
  • 铃声文件规范:Android支持MP3、WAV等格式,放在res/raw目录;iOS铃声需为CAF或WAV格式,时长不超过30秒,添加后需在Info.plist中声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:45:45