Expo推送通知经eas build构建后在iPhone上无法显示问题排查
可能导致EAS构建后推送通知失效的原因及排查方案
推送证书与APNs环境不匹配
Expo Go使用Expo官方的共享推送证书,而自定义EAS构建需要你自己配置对应环境的APNs证书:- 若构建的是生产版本(Ad Hoc/App Store),必须使用生产环境APNs证书,开发环境证书无法在生产构建中生效;
- 检查
eas.json中对应构建profile的ios.buildConfiguration字段:设置为Release对应生产环境,Debug对应开发环境,确保证书与构建环境一致。
推送Token的环境不兼容
Expo Go获取的是开发环境Token,EAS生产构建获取的是生产环境Token,两者不能跨环境混用:- 使用Expo测试通知服务时,要针对Token环境选择对应的推送入口:开发Token选开发环境测试,生产Token选生产环境测试。
通知权限未正确授予
尽管Expo Go中权限正常,但自定义构建的应用需要重新申请权限:- 确认代码中调用了
Notifications.requestPermissionsAsync()请求通知权限,且用户已授予; - 可以在应用中添加调试逻辑,打印
Notifications.getPermissionsAsync()的返回结果,确认权限状态为granted。
- 确认代码中调用了
EAS构建的推送配置缺失
检查项目配置文件的关键项:app.json/app.config.js中ios.bundleIdentifier必须与推送证书的Bundle ID完全一致;- 确认
expo.notifications配置正确,比如ios.useNativePlatformBridge未被错误设置为false; - 登录Expo控制台,查看项目的iOS推送证书状态,确保证书有效且与构建环境匹配。
APNs静默拒绝推送
生产环境APNs不会返回详细错误信息,可能出现请求成功但推送被静默拒绝的情况:- 使用Expo的
sendPushNotificationsAsync方法发送测试通知时,打印返回的响应结果,查看是否存在错误码; - 检查Expo项目的推送记录,确认通知的送达状态。
- 使用Expo的
iOS系统后台限制
iOS生产环境对通知的限制更严格:- 确保应用未被强制关闭(从后台划掉),强制关闭后应用无法接收推送;
- 检查设备是否开启了低功耗模式,该模式会延迟或阻止通知送达;
- 生产环境通知可能存在延迟,测试时可等待1-2分钟再确认结果。
内容的提问来源于stack exchange,提问作者Mickey
相关产品推荐
相关产品推荐

