Flutter中One Signal通知在iOS端无法显示图片的解决方法
One Signal iOS通知图片不显示的解决办法
1. 修正ios_attachments的格式
你之前的写法有误,One Signal要求iOS附件的键必须是UUID格式,不能用自定义的"id"。正确的请求体片段示例:
{ "app_id": "你的应用ID", "headings": {"en": "活动预告"}, "contents": {"en": "本周六线下沙龙等你来"}, "ios_attachments": { "00000000-0000-0000-0000-000000000000": "https://你的图片地址.com/image.jpg" } }
UUID可以随便生成一个,只要格式符合标准即可。
2. 检查图片的兼容性
iOS对通知图片有硬性要求:
- 格式仅限PNG或JPG
- 建议尺寸1024x1024像素,1:1比例(适配全设备)
- 图片URL必须是HTTPS协议,且服务器允许iOS设备访问(无地区限制、证书有效)
- 文件大小不超过10MB
3. 确认SDK与项目配置
在Flutter的iOS端做以下检查:
- 确保One Signal iOS SDK是最新稳定版
Info.plist中UIBackgroundModes已包含remote-notification- One Signal控制台的iOS应用配置中,推送证书有效且正确上传(区分开发/生产证书)
4. 必须添加通知扩展服务(Notification Service Extension)
iOS要加载通知附件,必须给项目添加这个扩展:
- 打开Xcode,选中项目 -> 点击"+"新增Target -> 选择"Notification Service Extension"
- 扩展的Bundle ID需为主应用ID后缀
.notification-service(例如com.yourapp.notification-service) - 无需修改
NotificationService.swift的默认代码,One Signal会自动处理附件 - 扩展的Deployment Target要和主应用一致,最低支持iOS 10
5. 完善请求体参数
发送通知时必须加入content_available: true,触发iOS的通知扩展处理附件:
{ "app_id": "你的应用ID", "content_available": true, "headings": {"en": "活动预告"}, "contents": {"en": "本周六线下沙龙等你来"}, "ios_attachments": { "00000000-0000-0000-0000-000000000000": "https://你的图片地址.com/image.jpg" } }
6. 排查错误的实用方法
- 去One Signal控制台的对应通知详情页,查看"Delivery"标签下的iOS设备错误日志,定位图片加载失败原因
- 用真实iOS设备测试,模拟器无法正常显示通知附件
- 直接在iOS设备的Safari中打开图片URL,确认能正常加载
内容的提问来源于stack exchange,提问作者Alperen Aygün
相关产品推荐
相关产品推荐

