我有一个简单的反应本机应用程序,已经可以进行身份验证。问题是,我无法读取/写入我的 firebase 实时数据库。
即使数据库中有数据,once 和 on 方法也不会执行任何回调(无论成功还是失败)。但是,如果我执行设置操作,on/once 方法将返回值。这些值都不会反映在在线数据库中,并且当我删除应用程序数据时,这些值不会保留。这意味着,实时数据库仅在本地工作,而不反映服务器端。
备注:
await reference.once('value')
也不起作用(永远不会越过这条线)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" />
您可以尝试使用数据库的显式路径来初始化数据库吗:
import database from '@react-native-firebase/database';
import firebase from '@react-native-firebase/app';
const db = firebase.app()
.database(
'https://<databaseName>.<region>.firebasedatabase.app'
);
在我的例子中,这个问题是由迁移数据库引起的 - Google 服务配置文件已更新,但配置文件中的数据库 URL 仍然指向旧数据库。
不知何故,因为旧数据库仍在同一个 Firebase 帐户上,但 Google 服务配置与“一次”查询从未完成不匹配。我检查了日志,没有看到任何错误或警告。
更正数据库 URL 解决了问题