Expo SDK48 iOS端能否接收带图片的推送通知?
Expo SDK48 iOS推送通知不显示图片的解决方案
这不是Expo的限制,本质是iOS和Android推送通知的媒体处理逻辑不同,需要针对iOS做额外的payload配置。以下是具体解决步骤:
关键配置要点
iOS要求推送必须携带mutable-content: 1来启用媒体扩展,同时要在APNs专属的payload里指定图片附件——Firebase默认的图片字段只适配Android。
1. 调整Firebase推送Payload
不管用Admin SDK还是控制台,都需要为iOS单独配置APNs参数:
- 在
apns.payload.aps中添加mutable-content: 1 - 在
apns.payload下添加attachment字段,包含图片的HTTPS地址(可选指定媒体类型)
用Admin SDK的示例代码:
const message = { token: "用户设备Token", notification: { title: "测试推送", body: "带图片的推送内容" }, // Android 图片配置(原逻辑不变) android: { notification: { imageUrl: "https://your-domain.com/image.jpg" } }, // iOS 专属配置 apns: { payload: { aps: { "mutable-content": 1 }, attachment: { url: "https://your-domain.com/image.jpg", type: "image/jpeg" } } } };
如果用Firebase控制台,需要切换到"高级选项",手动编辑APNs payload:
在APNs字段中输入:
{ "aps": { "mutable-content": 1 }, "attachment": { "url": "https://your-domain.com/image.jpg" } }
2. 验证Expo项目配置
确保项目已正确开启iOS推送权限:
- 在
app.json的ios.infoPlist中添加UIBackgroundModes包含remote-notification - 确认iOS推送证书已在Expo dashboard正确配置
示例app.json片段:
{ "expo": { "ios": { "bundleIdentifier": "com.your.app", "infoPlist": { "UIBackgroundModes": ["remote-notification"] } } } }
3. iOS媒体加载限制
- 图片必须是HTTPS链接,HTTP地址iOS会拒绝加载
- 图片大小不能超过10MB
- 支持格式:JPEG、PNG、GIF(静态/动态均支持)
常见问题排查
- 未添加
mutable-content: 1:iOS系统不会触发媒体扩展,直接忽略图片附件 - 图片地址不可访问:检查链接是否能在iOS Safari中正常打开
- Firebase控制台默认图片字段:该字段仅对Android生效,iOS需手动配置APNs payload
内容的提问来源于stack exchange,提问作者Isaac Batista
相关产品推荐
相关产品推荐

