刚刚使用react-native加载firebase 3.0并获得错误
[致命] [tid:com.facebook.react.RCTExceptionsManagerQueue]未处理的JS异常:无法找到变量:document
是否支持react-native?
React-native代码:
var firebase = require('firebase')
// Initialize Firebase
var config = {
apiKey: '<apiKey>',
authDomain: '<app>.firebaseapp.com',
databaseURL: 'https://<app>.firebaseio.com',
storageBucket: 'firebase-<app>.appspot.com'
};
firebase.config(config)
6 回答
最新版本的firebase使用Web应用程序中使用的文档变量,而RCTWebSocket或RCTView的工作方式不同 . (我对所有细节都不是100%肯定) . 无论如何,你可以安装旧版本的firebase,它将适合你 . 假设您已安装npm,请按照这些说明操作 .
从您的react-native项目卸载Firebase npm uninstall firebase --save
安装firebase的版本2.4.2 npm install firebase@2.4.2 --save
快乐Firebaseing!
Firebase JS SDK 3.1 just got released,现在与React Native兼容!
见release notes .
通过将以下内容放在.js文件中并将其导入index.ios.js的顶部,我能够将Firebase 3.0.2加载到React Native中:
可能还有其他陷阱 - 我没有进一步探讨,但可能会让Firebase 3为您工作 .
RN(但..)不支持Firebase 3.x.
问题
我认为这个问题与
auth
module 's dependency on the browser' swindow
变量有关 .它会得到官方支持吗?
根据Firebase团队的以下讨论主题,他们目前正致力于3.x支持 . 但是没有设置发布时间范围 .
Google Groups Discussion .
解决方法
选项1(使用FB 2.x)
来自Jacob Wenger:
选项2(使用FB 3.x)
来自Jacob Wenger:
要将最新版本的Firebase与ReactNative一起使用,您可以使用Firebase Bridge .
Whilst the Firebase JS SDK does work on react native now, it is mainly built for the web and is generally not the best solution for react-native.
Firebase Web SDK完全依赖于本机的JS thread运行,因此会影响您的应用程序帧速率(该链接很好地说明了这一点) .
在我的测试中,原生firebase SDK比使用Web SDK快大约2-3倍 .
但除了潜在的性能影响之外,还有很多功能你无法在android / ios设备上使用web SDK . 例如:
通知/ FCM
离线功能
存储上传/下载
Firebase崩溃报告
分析
使用社交认证提供商
最好的方法是使用原生的android / ios firebase sdk运行,并在它们和你的js代码之间 Build 一个桥梁(即本机模块设置) .
值得庆幸的是,您不必自己实现,已经有模块可以为您执行此操作:
react-native-firebase例如镜像了web sdk 's api js side but executes on the native side using the native android & ios firebase sdk' . 它与您可能已经实现的任何现有firebase js逻辑完全兼容,并且旨在替代web sdk .
(免责声明:我是react-native-firebase的作者)