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

iOS后台中cordova-plugin-fcm的FCMPlugin.onNotification函数未触发如何解决

这个问题我之前帮不少开发者排查过,iOS平台上FCMPlugin.onNotification在后台不触发,核心原因是iOS的推送机制和Android有本质区别,咱们一步步来解决:

1. 先搞懂iOS推送的两种触发逻辑

iOS对推送的处理分两种场景,直接决定onNotification是否会触发:

  • 普通通知(无content-available字段):应用后台时,系统会直接把消息展示在通知栏,只有用户点击通知进入应用时,才会调用onNotification。
  • 后台可回调的通知:如果需要后台也触发onNotification,必须在推送的payload里添加content-available: 1(注意是数字1,不是字符串),同时建议加上mutable-content: 1(如果需要动态修改通知内容的话)。

举个符合要求的payload示例:

{
  "to": "你的设备TOKEN",
  "content_available": true,
  "mutable_content": true,
  "notification": {
    "title": "后台测试通知",
    "body": "这条消息能触发后台回调"
  },
  "data": {
    "customKey": "customValue"
  }
}
2. 开启iOS的后台推送权限

这是容易遗漏的关键步骤:

  1. 打开Cordova项目的iOS工程(路径:platforms/ios/你的项目名.xcworkspace)
  2. 切换到Signing & Capabilities标签页
  3. 点击+ Capability,搜索并添加Background Modes
  4. 勾选Remote notifications选项
3. 检查插件版本与配置
  • 确保你用的是适配iOS13+的插件版本,旧版本可能存在API兼容问题。可以尝试重新安装插件:
cordova plugin remove cordova-plugin-fcm
cordova plugin add cordova-plugin-fcm
  • 确认config.xml里已经正确引入了GoogleService-Info.plist:
<platform name="ios">
    <resource-file src="GoogleService-Info.plist" />
</platform>
4. 确认onNotification的注册时机

必须在deviceready事件触发后再注册监听,而且代码要放在全局不会被销毁的上下文里,比如:

document.addEventListener('deviceready', function() {
  // 注册通知监听
  FCMPlugin.onNotification(function(notificationData) {
    console.log('收到通知:', notificationData);
    // 这里写你的通知处理逻辑
  }, function(error) {
    console.error('通知监听失败:', error);
  });
}, false);
5. 验证用户通知权限

确保用户已经给应用授予了通知权限,包括允许后台通知展示。可以在启动时主动请求权限:

FCMPlugin.requestPermissions({
  ios: {
    alert: true,
    badge: true,
    sound: true
  }
}, function(permissionStatus) {
  console.log('当前权限状态:', permissionStatus);
});

最后补充个小提示:iOS的后台推送不是100%稳定的,系统会根据应用活跃度、设备电量等因素限制回调频率,测试时尽量用真实设备,模拟器对后台推送的支持很有限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:46:23