Expo Notifications:iOS端无法接收推送通知问题排查
iOS端无法接收Expo推送通知的排查方案
添加experienceId本身不会导致推送接收异常,但如果该参数配置错误,会生成与应用不匹配的推送令牌,进而导致通知无法送达。结合你的情况,以下是关键排查点:
1. 验证experienceId的正确性
- 确保
@username/app-slug完全匹配app.json中的owner和slug字段,注意大小写敏感。如果是团队项目,owner应为团队账号名称而非个人账号。 - 若使用Expo Go测试,
experienceId可省略(SDK会自动识别);但裸机构建、自定义开发构建必须正确指定该参数。
2. 检查iOS推送证书与权限配置
- 登录Apple开发者后台,确认App ID已启用Push Notifications权限,且对应的APNs开发/生产证书未过期、未被吊销。
- 使用
expo credentials:manager命令查看当前推送证书状态,若存在异常,重新生成并同步证书。 - 确认构建环境与推送环境匹配:开发构建(Expo Go/自定义开发包)对应APNs开发环境,生产构建(App Store/Ad Hoc)对应生产环境。Expo推送API通常会自动根据令牌判断环境,但若手动指定
useProduction参数,需确保与构建环境一致。
3. 配置前台通知处理逻辑
iOS应用在前台运行时,默认不会显示通知弹窗,需添加以下代码启用前台通知展示:
Notifications.setNotificationHandler({ handleNotification: async () => ({ shouldShowAlert: true, shouldPlaySound: true, shouldSetBadge: true, }), });
4. 二次验证推送令牌与推送命令
- 使用Expo CLI命令直接推送测试,获取更详细的日志信息:
若推送失败,命令行日志会返回具体错误原因(如令牌无效、证书不匹配等)。expo push:send --token <你的ExpoPushToken> --message "测试通知" - 确认测试设备为物理iOS设备(模拟器无法接收APNs推送),且系统版本≥iOS 12(SDK46最低支持版本)。
5. 检查SDK与依赖版本兼容性
- 确认
package.json中expo-notifications版本为~0.16.1(SDK46对应的兼容版本),若版本不符,执行:expo install expo-notifications@~0.16.1
内容的提问来源于stack exchange,提问作者pbrune
相关产品推荐
相关产品推荐

