APN通知接口返回成功但Expo React Native应用无法接收通知
排查Expo React Native应用无法接收APN通知的步骤
1. 确认设备令牌类型是否正确
- Expo的
getDevicePushTokenAsync()返回的是Expo推送令牌,并非原生APN设备令牌,直接用该令牌调用APN接口无效。托管Expo项目必须通过Expo Push API发送通知;若要直接调用APN,需使用getDeviceTokenAsync(需配置expo-dev-client或转为裸工程)获取原生设备令牌。
2. 检查通知权限状态
- 调用
Notifications.getPermissionsAsync()确认应用已获取通知权限(状态为granted)。 - 检查iOS设备的系统设置,确保应用的通知权限未被禁用。
3. 匹配APN环境与应用构建环境
- 测试环境(开发构建)需调用APN沙箱地址
api.sandbox.push.apple.com,生产环境(正式构建)对应api.push.apple.com,必须保证接口环境与应用构建环境一致。
4. 验证通知Payload格式
- 直接调用APN时,Payload需符合苹果规范,核心
aps结构示例:{ "aps": { "alert": { "title": "测试标题", "body": "测试内容" }, "sound": "default" } } - 避免包含无效字段,否则苹果服务器可能静默丢弃通知。
5. 核对Expo项目配置
- 检查
app.json/app.config.js中的iOS配置,确保bundleIdentifier正确,且开启后台通知权限:{ "ios": { "bundleIdentifier": "com.your.app.id", "infoPlist": { "UIBackgroundModes": ["remote-notification"] } } } - 托管项目需在Expo Dashboard上传对应环境的APN证书(开发/生产)。
6. 检查设备状态
- 确保测试设备为真实iOS设备(模拟器无法接收APN通知),且处于联网状态、未开启“请勿打扰”模式。
内容的提问来源于stack exchange,提问作者satya o
相关产品推荐
相关产品推荐

