React-Native,Firebase 实时数据库一次/打开/设置不起作用

问题描述 投票:0回答:2

我有一个简单的反应本机应用程序,已经可以进行身份验证。问题是,我无法读取/写入我的 firebase 实时数据库。

即使数据库中有数据,once 和 on 方法也不会执行任何回调(无论成功还是失败)。但是,如果我执行设置操作,on/once 方法将返回值。这些值都不会反映在在线数据库中,并且当我删除应用程序数据时,这些值不会保留。这意味着,实时数据库仅在本地工作,而不反映服务器端。

备注:

  • 实时数据库位于 us-central1
  • 对于 readwrite,规则设置为 true
  • await reference.once('value') 
    也不起作用(永远不会越过这条线)
  • 能够获取正确的引用对象,因为 google-services.json 包含 firebase url(参见代码)
  • 我可以使用 Firebase 身份验证,因此我确信配置步骤是正确的
  • 在任何 Android 相关更改后重建应用程序并运行 gradle 构建

App.js:

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

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

    console.log(reference); // LOGS CORRECT ADDRESS

    reference.once(    // NO VALUE RETURNED
      'value',
      (snapshot) => {
        console.log('User data: ', snapshot.val());
      },
      (error) => {
        console.log('error reading messages', error);
      }
    );
  }, []);

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

实时数据库值:

{
  "test": "test"   // exported from parent level
}

实时数据库规则:

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

依赖关系:

"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"
},

添加了 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"

应用程序权限:

<uses-permission android:name="android.permission.INTERNET" />
android firebase react-native firebase-realtime-database react-native-firebase
2个回答
0
投票

您可以尝试使用数据库的显式路径来初始化数据库吗:

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

const db = firebase.app()
.database(
  'https://<databaseName>.<region>.firebasedatabase.app'
);

0
投票

在我的例子中,这个问题是由迁移数据库引起的 - Google 服务配置文件已更新,但配置文件中的数据库 URL 仍然指向旧数据库。

不知何故,因为旧数据库仍在同一个 Firebase 帐户上,但 Google 服务配置与“一次”查询从未完成不匹配。我检查了日志,没有看到任何错误或警告。

更正数据库 URL 解决了问题

© www.soinside.com 2019 - 2024. All rights reserved.