Expo推送通知在Expo Go中正常但EAS Android预览构建无法生效的问题咨询
Expo推送通知在Expo Go中正常但EAS Android预览构建无法生效的问题咨询
不用急着切换到OneSignal或者其他第三方服务!Expo自带的Notifications API完全可以在EAS构建的Android应用中正常工作,大概率是你漏了几个原生构建特有的配置步骤,我帮你梳理下排查方向:
一、优先排查Expo原生通知的配置问题
1. 必须配置Firebase Cloud Messaging(FCM)
Expo Go之所以能直接用,是因为它用了Expo官方的FCM配置,但你自己构建的应用必须绑定你自己的Firebase项目:
- 去Firebase控制台创建项目,添加你的Android应用(包名要和你app.json里的
android.package完全一致) - 下载生成的
google-services.json文件,放到你的项目根目录 - 在app.json/app.config.js中添加配置:
"android": { "package": "com.your.app", "googleServicesFile": "./google-services.json" } - 检查eas.json里的preview构建配置,确保没有覆盖这个设置,比如:
"preview": { "android": { "googleServicesFile": "./google-services.json" } }
2. 确认使用的是构建后应用的推送Token
Expo Go的Token和你EAS构建后的Token是完全不同的,因为它们属于不同的应用环境。你需要:
- 在构建后的应用中,通过
Notifications.getExpoPushTokenAsync()获取新的Token - 把这个新Token替换到你发送通知的请求里,别再用Expo Go的Token测试了!可以在app里加个简单的弹窗或者日志输出Token,方便你复制测试。
3. 明确请求通知权限(Android 13+)
Android 13及以上版本必须主动请求POST_NOTIFICATIONS权限,Expo Go可能帮你默认处理了,但原生构建的应用要自己实现:
- 在app启动时调用:
const { status } = await Notifications.requestPermissionsAsync(); if (status !== 'granted') { Alert.alert('权限不足', '请允许通知权限以接收推送'); return; } - 确保用户授权后再尝试获取Token和接收通知。
4. 配置Android通知通道(Android 8.0+)
Android 8.0+要求所有通知必须属于一个通知通道,否则系统会直接拦截:
- 在app初始化时创建通道:
await Notifications.setNotificationChannelAsync('default', { name: 'Default Channel', importance: Notifications.AndroidImportance.DEFAULT, vibrationPattern: [0, 250, 250, 250], lightColor: '#FF231F7C' }); - 发送通知时,在消息的
android.channelId字段指定这个通道ID(比如上面的default)。
5. 测试推送的正确性
用Expo的Push API直接测试,确保请求格式正确:
- 用curl命令(或者Postman)发送请求,替换成你自己的构建后Token:
curl -H "Content-Type: application/json" -X POST "https://exp.host/--/api/v2/push/send" -d '{ "to": "YOUR_EAS_BUILD_PUSH_TOKEN", "title": "测试通知", "body": "这是来自EAS构建应用的测试推送", "android": { "channelId": "default" } }' - 查看返回的响应,如果有错误信息,根据提示排查(比如Token无效、权限问题等)。
二、如果还是不行,再考虑免费的替代方案
如果上面的步骤都试过还是没解决,或者你想更简单的集成,可以考虑这些免费的第三方服务:
- OneSignal:免费额度足够大部分个人/小型项目,集成文档很详细,支持Expo项目,不用太多原生配置
- Firebase Cloud Messaging(FCM)直接集成:完全免费(在免费额度内),可以跳过Expo的Push API,直接用FCM的SDK发送通知,适合对原生配置熟悉的开发者
- Pusher Beams:免费版支持一定量的设备和推送,集成也比较简单
总结
90%的情况下,构建后收不到通知都是FCM配置、Token错误、权限或通道没设置的问题,先把这些基础配置排查完,完全不用急着换第三方服务。如果排查过程中遇到具体的错误信息,比如构建日志报错、推送返回的错误码,随时贴出来我再帮你分析!




