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

React-Native中Firebase Realtime Database的once/on/set方法失效

React Native Firebase Realtime Database 仅本地生效,无法同步云端

问题现象

React Native应用中Firebase身份验证正常,但Realtime Database读写异常:

  • once、on方法完全不触发成功/失败回调,即使云端数据库已有数据
  • 执行set操作后,on/once能返回值,但数据不会同步到云端,删除应用数据后即丢失,说明仅本地生效,未与服务器同步

已确认信息

  • Realtime Database 部署在 us-central1 区域
  • 数据库读写规则设为全开放:.read和.write均为true
  • 使用await reference.once('value')时程序直接卡在该行,无响应
  • 能获取正确的reference对象,google-services.json包含正确Firebase地址(日志已验证)
  • Firebase身份验证功能正常,配置步骤无误
  • 修改Android配置后已执行应用重建和Gradle Build操作

相关代码与配置

App.js

import database from '@react-native-firebase/database';

const App = () => {
  useEffect(() => {
    const reference = database().ref('test');

    console.log(reference); // 日志打印正确的数据库地址

    reference.once(    // 无任何返回值
      'value',
      (snapshot) => {
        console.log('User data: ', snapshot.val());
      },
      (error) => {
        console.log('error reading messages', error);
      }
    );
  }, []);

  return (
    <IconComponentProvider IconComponent={MaterialCommunityIcons}>
      {/* <AppProvider>
        <NavigationStack />
      </AppProvider> */}
    </IconComponentProvider>
  );
};

云端Realtime Database数据

{
  "test": "test"   // 根节点下的测试数据
}

数据库规则

{
  "rules": {
    ".read": true,
    ".write": true,
  }
}

项目依赖(package.json)

"dependencies": {
  "@react-native-firebase/app": "^15.6.0",
  "@react-native-firebase/auth": "^15.6.0",
  "@react-native-firebase/database": "^15.6.0",
  "@react-native-material/core": "^1.3.7",
  "@react-navigation/bottom-tabs": "^6.3.3",
  "@react-navigation/drawer": "^6.4.4",
  "@react-navigation/native": "^6.0.12",
  "@react-navigation/native-stack": "^6.8.0",
  "eslint": "^7.32.0 || ^8.2.0",
  "eslint-config-prettier": "^8.5.0",
  "eslint-plugin-react-native": "^4.0.0",
  "prettier": "^2.7.1",
  "react": "18.0.0",
  "react-native": "0.69.5",
  "react-native-gesture-handler": "^2.6.0",
  "react-native-reanimated": "^2.10.0",
  "react-native-safe-area-context": "^4.3.3",
  "react-native-screens": "^3.17.0",
  "react-native-vector-icons": "^9.2.0",
  "yarn": "^1.22.19"
},

Android app/build.gradle 添加的依赖

implementation platform('com.google.firebase:firebase-bom:30.4.1')
implementation "com.google.firebase:firebase-core"
implementation "com.google.firebase:firebase-auth"
implementation "com.google.firebase:firebase-database"

Android 权限配置

<uses-permission android:name="android.permission.INTERNET" />

解决方案建议

1. 手动指定数据库URL

由于数据库部署在us-central1(非默认区域),RN Firebase可能无法自动识别,需手动指定数据库URL:

// 方式1:初始化引用时指定
const reference = database('https://<你的数据库ID>.firebaseio.com').ref('test');

// 方式2:全局初始化时配置
import firebase from '@react-native-firebase/app';
firebase.app().options.databaseURL = 'https://<你的数据库ID>.firebaseio.com';

数据库URL可在Firebase控制台Realtime Database页面获取

2. 对齐Firebase BOM版本兼容性

@react-native-firebase 15.6.0对应推荐的Firebase BOM版本为31.0.0及以上,修改app/build.gradle:

implementation platform('com.google.firebase:firebase-bom:31.0.0')

修改后执行./gradlew clean再重新构建应用。

3. 启用调试日志排查

添加日志查看底层连接状态:

import database from '@react-native-firebase/database';
database().setLoggingEnabled(true);

运行后查看日志,排查是否存在连接失败、权限异常或网络拦截问题。

4. 检查网络与代理

确保测试设备/模拟器能正常访问Firebase服务,避免代理或防火墙阻止Realtime Database的WebSocket/HTTPS连接。

5. 重新验证google-services.json

从Firebase控制台重新下载google-services.json,确认其中database_url字段与数据库URL完全一致,替换后重新构建应用。


内容的提问来源于stack exchange,提问作者B T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:46:47