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

Firebase Web应用发送iOS通知报错:messaging.sendToDevice不是函数

解决「messaging.sendToDevice is not a function」错误的方案

这个错误源于你使用的Firebase FCM Web SDK是v9+模块化版本,但仍在调用旧版命名空间API的sendToDevice方法——v9+模块化已移除该方法,改用send函数发送通知。

另外你代码里存在变量名不匹配的问题:定义的通知负载是apnsPayload,但调用时传入的是未定义的payload,这也会引发报错。

修正后的代码示例

首先确保正确导入FCM相关函数:

import { getMessaging, send } from "firebase/messaging";

替换原代码中的通知发送逻辑:

// ... 数据库操作、Token获取逻辑保持不变

if (apnTokens) {
    // 构造符合FCM v9+要求的消息结构,适配iOS APNs
    const message = {
        notification: {
            title: 'Nuova comanda',
            body: 'Hai ricevuto una nuova comanda personale.'
        },
        apns: {
            payload: {
                aps: {
                    // 可添加iOS专属配置,如提示音、角标等
                    sound: 'default'
                }
            }
        }
    };

    // 初始化FCM实例
    const messaging = getMessaging();

    // 遍历Token发送通知
    for (const tokenKey in apnTokens) {
        if (apnTokens.hasOwnProperty(tokenKey)) {
            const token = apnTokens[tokenKey].APNs_User_Token;
            console.log(token);

            try {
                // 使用v9+的send方法发送通知
                await send(messaging, token, message);
                console.log(`Notifica inviata al token APN: ${token}`);
            } catch (error) {
                console.error(`Errore nell'invio della notifica al token APN: ${token}`, error);
            }
        }
    }
}

关键注意事项

  • SDK版本适配:v9+模块化SDK需使用导入的模块化函数,不能再用旧版命名空间的messaging.sendToDevice类方法。
  • 消息结构合规:针对iOS设备,需在apns.payload.aps中配置APNs要求的专属参数,保证通知能正常解析。
  • 变量一致性:确保代码中负载变量名和调用时的参数名一致,避免未定义错误。
  • 权限配置:确认Firebase项目已在Apple开发者平台配置正确的APNs证书,Web应用的FCM配置无误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:05:13