React Native集成Firebase Realtime Database后无法读写数据
我已按文档步骤完成@react-native-firebase的集成(包括添加google-services文件、更新build.gradle等操作),但调用on、once、set等方法进行数据库读写时全部失败。
相关代码
数据获取函数
const handleClick = () => { const databaseForDefaultApp = firebase .database() .ref() .on('value', snapshot => { console.log('Retreiveing data..'); console.log(snapshot); }); };
按钮UI代码
return ( <SafeAreaView style={styles.container}> <View> <Button title="Press me" onPress={handleClick} /> </View> </SafeAreaView> );
依赖版本(package.json)
"dependencies": { "@react-native-firebase/app": "^15.6.0", "@react-native-firebase/database": "^15.6.0", "react": "18.1.0", "react-native": "0.70.1" }
排查步骤
检查数据库权限规则:Firebase实时数据库默认规则仅允许认证用户读写,若未配置认证或当前无登录用户,请求会直接被拒绝。可临时将规则改为(仅用于测试,上线前必须改回安全规则):
{ "rules": { ".read": true, ".write": true } }测试是否能正常读写,若可行则说明是权限规则问题,后续需配置合适的认证逻辑和权限规则。
确认数据库URL配置:如果使用非默认区域的数据库,必须在初始化时明确指定数据库URL,否则SDK会连接到默认区域(通常为us-central1),导致无法访问目标数据库。检查
firebase.json或初始化代码中的URL配置是否正确。查看调试日志:在Android Studio的Logcat或Xcode控制台中搜索
FirebaseDatabase、Error等关键词,日志会输出具体的失败原因,比如权限被拒、网络连接失败、URL错误等。验证网络连接:确保测试设备/模拟器能正常访问Firebase服务,部分网络环境可能屏蔽Firebase域名,可尝试切换网络(如手机热点)测试。
检查SDK初始化状态:确认
@react-native-firebase/app已正确初始化,可在App启动时添加日志验证:import firebase from '@react-native-firebase/app'; console.log('Firebase app 初始化状态:', firebase.apps.length > 0);版本兼容性验证:核对RN 0.70.1与Firebase 15.6.0的版本适配性,若存在兼容问题,尝试升级或降级Firebase SDK版本。
内容的提问来源于stack exchange,提问作者Abderrahmen Mhemed

