Expo推送通知本地正常,TestFlight及安卓APK生产环境失效求助
Expo推送通知生产环境失效排查方案
核心排查方向
- 确认推送Token的环境匹配:本地开发、EAS开发版、TestFlight对应不同的环境,Token是绑定环境的。你需要确保发送通知时使用的是对应生产/TestFlight环境生成的Token,而非本地开发环境的Token。
- 检查EAS构建的配置参数:
- 安卓开发版构建时,需确认
eas.json中是否正确配置了developmentClient: true,同时Firebase的配置是否对应开发环境的参数; - iOS的TestFlight构建属于生产环境,需确认Expo凭据中是否上传了正确的APNs密钥,且构建时指定了生产环境配置。
- 安卓开发版构建时,需确认
- 验证推送请求的返回结果:你的
sendPushNotification函数没有处理接口返回的错误信息,建议添加日志捕获返回内容,比如:
export async function sendPushNotification(expoPushToken) { const message = { to: expoPushToken, sound: "default", title: "Welcome", body: "Body text", data: { someData: "goes here" }, }; const response = await fetch("https://exp.host/--/api/v2/push/send", { method: "POST", headers: { Accept: "application/json", "Accept-encoding": "gzip, deflate", "Content-Type": "application/json", }, body: JSON.stringify(message), }); // 新增日志查看返回结果 const responseData = await response.json(); console.log('推送接口返回:', responseData); }
通过返回的错误码可以定位具体问题,比如Token无效、权限不足等。
- 检查设备通知权限:生产环境下,用户首次打开App时是否授予了通知权限?可以在App启动时主动检查权限状态,若未授权引导用户开启。
- Expo SDK版本兼容性:你使用的SDK 47.0.0相对老旧,部分推送服务的适配可能存在问题,建议尝试升级到较新的稳定版本,同时同步更新相关依赖。
额外注意点
- 安卓开发版APK需要使用Expo Go以外的客户端打开,确保构建包包含了完整的推送配置;
- TestFlight环境下,推送通知可能存在延迟,需等待几分钟再确认是否送达;
- 确认Firebase控制台中对应的安卓应用包名、iOS应用的Bundle ID与EAS构建配置完全一致。
内容的提问来源于stack exchange,提问作者Akhil Boddu
相关产品推荐
相关产品推荐

