You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:07:00