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

Firebase Cloud Function发送iOS推送角标报错,如何正确配置?

解决Firebase Cloud Function推送iOS角标报错的问题

我之前也踩过这个坑!Firebase Cloud Messaging(FCM)的notification字段是跨平台通用的模板,它并不包含badge这种iOS专属的属性,所以你直接在notification里加badge才会触发那个"Cannot find field"的错误。

要给iOS设备设置应用角标数字,你需要通过FCM的apns字段来配置iOS特定的推送参数,把badge放在apns.payload.aps下面。下面是修改后的代码:

exports.onAddLog = functions.database.ref("/NodesLog/{id}").onCreate((change, context) => {
  const payload = {
    "topic": "Channel123",
    "notification": {
      "title": "Test-Title",
      "body": "Test-Body"
    },
    "apns": {
      "payload": {
        "aps": {
          "badge": 1 // 这里用数字类型,字符串也可兼容,但推荐用数字
        }
      }
    },
    "data": {
      "test": "test",
      "notId": "123"
    }
  };

  const promise = admin.messaging().send(payload)
    .then(sendSuccess => console.log("Notification sent successfully"))
    .catch(error => console.error("Error sending notification: ", error));

  return promise;
});

几个关键点说明:

  • apns字段是FCM专门用于配置iOS推送的区域,里面的payload.aps完全对应APNs原生的推送 payload 格式,badge是APNs标准支持的属性。
  • 如果需要实现角标累加效果,你得自己在后端维护每个用户的角标数值,或者让客户端接收推送后在本地更新角标计数(毕竟FCM没法直接读取设备当前的角标数)。
  • 如果你同时使用notification和data字段,iOS在前台/后台的处理逻辑有差异:后台时系统会自动显示通知并更新角标;前台时需要客户端代码手动读取userInfo里的badge值来更新角标。

另外我帮你调整了原代码里的Promise链结构,去掉了重复的catch,让逻辑更清晰简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:28:15