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

Flutter iOS Notification Service Extension未调用 推送图片不显示

问题详情
  • 基础推送展示异常:接收远程推送通知时,需通过payload中的imageurl字段加载展示图片,调整payload结构后Android端功能运行正常,但iOS端推送无法正常展示图片。
  • 通知扩展触发异常:已接入Notification Service Extension并编写通知内容修改代码,该套配置在原生iOS应用中可正常运行;但在Flutter iOS项目中接入相同配置后功能失效,接收推送时扩展未被调用,仅能收到普通通知,尝试多种排查方案后问题仍未解决。
已完成配置步骤
  • 添加通知权限申请相关代码
  • 为项目添加Notification Extension
  • 采用自动签名管理完成配置文件设置
  • 编写通知内容修改的业务代码
  • 在推送payload中添加imageURL、mutable-content字段
问题排查与修复方案

按以下优先级逐一校验,可覆盖绝大多数Flutter iOS通知扩展失效场景:

  1. 校验payload格式合规性
    iOS系统对推送字段的位置、类型、命名敏感度远高于Android,必须满足:
    • mutable-content字段必须放在aps节点内部,值必须是数字1,不能传布尔值true,也不能写错成驼峰命名mutableContent
    • 自定义图片字段要和代码里的取值key完全匹配,已配置的imageURL和问题描述中的imageurl大小写不一致,会直接导致拿不到图片地址
      正确的payload结构参考:
    {
      "aps": {
        "alert": {"title": "推送标题", "body": "推送内容"},
        "mutable-content": 1,
        "sound": "default"
      },
      "imageurl": "可直接访问的HTTPS图片直链"
    }
    
  2. 校验Extension部署版本配置
    新建Notification Service Extension时Xcode默认会给Extension设置最新系统的部署版本,如果测试设备系统版本低于这个值,系统会直接跳过扩展执行,永远不会触发扩展代码。需要把Extension的Deployment Target改成和主项目一致,且低于测试设备的系统版本。
  3. 校验签名与Bundle ID配置
    自动签名很容易出现Extension配置错位的问题:
    • Extension的Bundle ID必须是主项目Bundle ID加后缀的格式,比如主项目ID是com.demo.app,Extension ID要设为com.demo.app.notificationservice,不能单独设置无关联的ID
    • 主项目和Extension必须选择同一个开发团队,确认Xcode签名栏没有红色报错
  4. 校验Extension运行内存限制
    iOS系统给Notification Service Extension分配的运行内存上限仅24MB,如果下载图片后直接加载未压缩的高清原图,会直接触发系统杀死扩展进程,最终回退展示普通文本通知。需要在扩展代码里把下载完的图片压缩到宽度500px左右的尺寸,再写入沙盒赋值给通知附件。
  5. 校验测试环境与运行状态
    • 通知扩展必须用真机测试,模拟器不支持扩展触发逻辑
    • 测试时不要把应用停留在前台,前台状态下推送默认走应用内接收逻辑,不会触发系统通知弹窗和扩展执行,需要把应用切到后台或者彻底杀死进程后再发推送测试。
  6. 校验Flutter项目Pod配置
    打开项目ios/Podfile,确认没有把Extension的依赖错误链接到Runner主Target,避免出现符号冲突导致扩展加载失败。
参考附件
  • Notification service类截图
  • Payload结构截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.21 16:16:02