React Native Expo项目:无需Expo服务器通过FCM发Android通知是否可行?是否仅需eject?
嘿,这个问题我之前帮人处理过,其实完全不需要eject就能实现Android端直接使用FCM发送远程通知、绕过Expo服务器的需求!下面给你一步步拆解方案:
无需Eject的实现步骤
1. 配置Firebase到Expo项目
首先在Firebase控制台创建你的Android应用,下载对应的google-services.json文件,把它放到你的Expo项目根目录。然后在项目的app.json里添加Android的FCM相关配置:
{ "expo": { "android": { "googleServicesFile": "./google-services.json", "useNextNotificationsApi": true } } }
这里的useNextNotificationsApi是核心开关,它会让Expo使用原生FCM通道,而不是走Expo自己的推送服务。
2. 获取原生FCM令牌
别再用Expo的getExpoPushTokenAsync了,直接用Expo Notifications模块获取原生FCM令牌:
import * as Notifications from 'expo-notifications'; async function fetchFCMToken() { // 先申请通知权限 const { status } = await Notifications.requestPermissionsAsync(); if (status === 'granted') { // 获取FCM令牌,记得传入你的Firebase项目ID const tokenResult = await Notifications.getDevicePushTokenAsync({ projectId: '你的Firebase项目ID' }); console.log("原生FCM令牌:", tokenResult.data); // 把这个令牌存到你的后端,后续推送就用它 } }
3. 直接通过FCM发送通知
现在你可以直接用Firebase Admin SDK或者FCM的HTTP API,向获取到的FCM令牌发送通知,完全绕开Expo服务器。比如用curl调用FCM HTTP API的示例:
curl -X POST "https://fcm.googleapis.com/fcm/send" \ -H "Authorization: key=你的FCM服务器密钥" \ -H "Content-Type: application/json" \ -d '{ "to": "刚才获取的FCM令牌", "notification": { "title": "测试通知", "body": "这是直接通过FCM发送的通知哦" } }'
为什么不用Eject?
Expo从v27版本开始就已经支持直接集成FCM的能力,只要正确配置googleServicesFile和启用useNextNotificationsApi,在managed workflow(不eject)的情况下就能使用原生FCM功能,完全满足你只针对Android平台的需求。
一些注意事项
- 确保你的Expo SDK版本至少是v27及以上,建议用更近期的稳定版本,兼容性更好。
- 测试的时候要构建独立APK或者用Expo Dev Client,Expo Go可能没法完全支持原生FCM的配置。
- 一定要先申请用户的通知权限,不然没法获取令牌和接收通知。
内容的提问来源于stack exchange,提问作者Kenta Hara
相关产品推荐
相关产品推荐

