React Native独立版App无法接收Expo推送通知问题求助
解决Expo推送通知SNS发送失败的问题
我之前也踩过几乎一模一样的Expo推送坑,结合你描述的场景——独立APK收不到、他人用Expo客户端也收不到(只有你自己能收),还有统一的SNS报错,给你拆解下可能的原因和解决办法:
1. 独立版安卓APP:检查FCM配置是否到位
独立版安卓的推送依赖Firebase Cloud Messaging(FCM),Expo是通过AWS SNS中转到FCM的,如果FCM配置错了,必然会触发SNS发送失败:
- 打开Expo Dashboard,找到你的项目进入「Credentials」页面,检查「Android Push Certificates」是否已经关联了有效的Firebase Server Key。
- 如果没配置,去Firebase控制台创建对应包名的项目,生成Server Key后上传到Expo这边。
- 注意:配置完必须重新构建APK(执行
eas build -p android),旧的APK不会加载新的配置。
2. Expo客户端推送异常:排查设备权限与注册状态
只有你自己能收、别人收不到,大概率是对方设备的注册或权限问题:
- 让对方检查手机系统的通知权限,确保Expo客户端(或你的APP)被允许发送通知。
- 让对方重新登录Expo客户端,或者卸载重装后重启APP——有时候旧的设备注册信息会失效,导致Expo无法正确定位设备。
- 确认对方的Expo客户端是最新版本,旧版本可能存在推送兼容性bug。
3. 验证推送目标Token的有效性
别小看这个细节,很多时候是用错了Token:
- 让对方在APP里打印自己的Expo Token(比如用
alert(ExpoPushToken)或者控制台输出),确保你推送时用的是对方的专属Token,而不是你自己的。 - 可以用Expo Dashboard里的「Push Notifications」测试工具,输入对方的Token直接测试,排除你代码里推送逻辑的问题。
4. 获取完整SNS错误信息定位根源
你给出的错误被截断了,完整的错误信息会明确说明原因(比如InvalidPlatformToken、EndpointDisabled):
- 调用Expo推送API时,加上
detail: true参数,就能拿到详细错误:{ "to": "TARGET_EXPO_TOKEN", "title": "测试通知", "body": "Hello World", "detail": true } - 根据错误码处理:比如
InvalidPlatformToken说明Token无效,需要重新获取;EndpointDisabled说明设备推送端点被禁用,需要用户重新开启权限或重新注册设备。
5. 检查项目配置的一致性
确保app.json里的配置和Firebase项目匹配:
- 确认
android.package字段的包名,和Firebase控制台里的包名完全一致,包名不匹配会导致FCM拒绝请求,进而触发SNS失败。 - 如果用EAS Build,确保
googleServicesFile路径正确,已经关联了Firebase的google-services.json文件。
内容的提问来源于stack exchange,提问作者Sarmad Shah
相关产品推荐
相关产品推荐

