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
相关产品推荐
相关产品推荐

