Firebase Messaging安卓端通过Payload推送图片不显示(iOS端正常)及下载失败问题求助
解决FCM推送图片安卓端无法显示的问题
我来帮你排查这个FCM推送图片的问题——看日志里的FileNotFoundException,其实核心原因很明确:你使用的图片URL是网页链接,而非直接指向图片文件的地址,这导致安卓FCM客户端尝试下载时,无法获取到有效的图片资源,进而触发异常。iOS端能正常显示,大概率是因为该图片网站对iOS的访问策略更宽松,或者iOS的FCM客户端能自动解析网页内的图片资源,但安卓端不支持这个逻辑。
下面是具体的解决步骤:
1. 替换为直接的图片文件URL
打开你提供的图片链接(https://www.kindpng.com/picc/m/252-2524695_dummy-profile-image-jpg-hd-png-download.png),这其实是图片的详情网页。你需要在网页里找到图片的真实源地址:
- 右键点击图片 → 选择「复制图片地址」(不同浏览器选项可能略有不同)
- 得到的地址应该是类似
https://cdn.kindpng.com/picc/m/252-2524695_dummy-profile-image-jpg-hd-png-download.png这样的直接指向图片文件的URL
把Payload中android.notification.image和apns.fcm_options.image字段的值,都替换成这个直接的图片URL。
2. 验证URL的公开可访问性
替换后,先确认这个URL在安卓设备上能正常访问:
- 用安卓手机的浏览器打开该URL,确保能直接显示图片
- 也可以用curl模拟安卓的User-Agent测试(避免网站的防盗链限制):
curl -A "Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.105 Mobile Safari/537.36" https://your-direct-image-url.png
如果能正常返回图片内容,说明URL是有效的。
3. 检查FCM配置的正确性
确保Payload里安卓部分的配置没有问题:
android.notification.image字段拼写正确- URL必须是HTTPS协议(FCM要求推送图片必须用HTTPS)
额外建议:使用可靠的图片存储服务
为了避免后续再出现类似的防盗链、访问限制问题,建议把推送图片托管在公开可访问的存储服务中,比如Firebase Storage、AWS S3或者你自己的服务器。这些服务通常不会对请求的User-Agent做限制,能保证FCM客户端稳定下载图片。
修正后的Payload示例
{ "message": { "token": "fh748hf......", "notification": { "body": "This is an FCM notification message!", "title": "FCM Message" }, "data": { "body": "This is an FCM notification message!", "title": "FCM Message" }, "android": { "notification": { "image": "https://cdn.kindpng.com/picc/m/252-2524695_dummy-profile-image-jpg-hd-png-download.png" } }, "apns": { "payload": { "aps": { "mutable-content": 1 } }, "fcm_options": { "image": "https://cdn.kindpng.com/picc/m/252-2524695_dummy-profile-image-jpg-hd-png-download.png" } } } }
内容的提问来源于stack exchange,提问作者Jaydeep chatrola
相关产品推荐
相关产品推荐

