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

服务端调用FCM向iOS推送报BadDeviceToken问题咨询

问题排查结论

这个报错和你已经调通的Android侧配置无关,核心是iOS推送链路的环境/参数匹配问题,按以下优先级排查即可:

  • 第一优先级:APNs环境不匹配(占这类问题的80%以上)
    Firebase控制台发推送时会自动适配APNs沙盒/生产环境,但你调用的FcmSender默认走生产APNs通道:
    • Xcode直连调试安装的debug包,生成的是沙盒环境device token,走生产通道必然报BadDeviceToken
    • TestFlight、App Store下载的正式包,生成的才是生产环境device token
      你只需要在初始化FcmSettings时,根据当前App的发布渠道显式指定APNs环境即可,debug阶段设为沙盒模式,正式发布切回生产模式。
  • 第二优先级:Device Token传参格式错误
    不少旧版本的FcmSender封装会默认对传入的token做小写转换、特殊字符过滤,但iOS注册到FCM的device token是大小写敏感的,不要对token做任何大小写修改,仅需要调用Trim()去掉前后可能携带的空格、换行符即可,可以逐字符比对你传入代码的token和Firebase控制台测试时用的token是否完全一致。
  • 第三优先级:Firebase后台iOS配置校验
    进入Firebase项目设置的云消息传递页,检查iOS应用下上传的APNs认证密钥/证书是否同时覆盖了沙盒、生产环境,如果你仅上传了生产环境证书,沙盒token的推送请求也会报错——不过这个场景下Firebase控制台发推送也会失败,你目前控制台推送正常,这个问题概率极低,可以最后排查。
修正后的参考代码
// 根据当前运行环境调整IsApnsSandboxEnvironment参数
var settings = new FcmSettings
{
    SenderId = "你配置的senderId",
    ServerKey = "你配置的ServerKey",
    // debug调试阶段设为true,正式发版设为false
    IsApnsSandboxEnvironment = true
};
var fcm = new FcmSender(settings, httpClient);
// 仅去除token前后空白字符,不做任何大小写转换、内容修改
await fcm.SendAsync(deviceToken.Trim(), notification);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:33:15