使用React Native运行Firebase 3.0时出错

时间:2016-05-18 23:41:05

标签: firebase react-native

刚刚使用react-native加载firebase 3.0并收到错误

  

[致命] [tid:com.facebook.react.RCTExceptionsManagerQueue]未处理   JS异常:无法找到变量:document

是否支持react-native?

React-native code:

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 个答案:

答案 0 :(得分:13)

最新版本的firebase使用Web应用程序中使用的文档变量,而RCTWebSocket或RCTView的工作方式不同。 (我对所有细节都不是100%肯定)。无论如何,你可以安装旧版本的firebase,它将适合你。假设你安装了npm,请按照这些说明进行操作。

  1. 从您的react-native项目中卸载Firebase npm uninstall firebase --save
  2. 安装firebase版本2.4.2 npm install firebase@2.4.2 --save
  3. Happy Firebaseing!

答案 1 :(得分:8)

Firebase JS SDK 3.1 just got released,现在与React Native兼容!

请参阅release notes

答案 2 :(得分:2)

RN(但..)不支持Firebase 3.x.

问题

我认为该问题与auth模块对浏览器的window变量的依赖性有关。

是否会得到官方支持?

根据Firebase团队的以下讨论主题,他们目前正致力于3.x支持。但是没有设置发布时间范围。

Google Groups Discussion

变通方法

选项1(使用FB 2.x)

来自雅各布温格:

  

如果React Native支持对您有阻止,请继续使用   我们解决此问题之前的2.x.x SDK。 2.x.x SDK会   继续工作,即使在您迁移到新控制台之后......`

选项2(使用FB 3.x)

来自雅各布温格:

  

作为一种“解决方法”,如果你不需要auth(不太可能,我知道,但仍然   值得一提的是,你应该能够做到以下几点:

     

var app = require('firebase / app');
  var database = require('firebase / database');

答案 3 :(得分:2)

我可以通过将以下内容放在.js文件中并将其导入index.ios.js顶部来使Firebase 3.0.2加载到React Native中:

global.location = {
  href: ''
};
global.screen = {

};
global.document = {
  getElementsByTagName: function(){}
};
global.parent = global;

可能还有其他问题 - 我没有进一步探讨过这个问题,但可能会让Firebase 3为您服务。

答案 4 :(得分:1)

要将最新版本的Firebase与ReactNative一起使用,您可以使用Firebase Bridge

  

我有一个演示应用here

答案 5 :(得分:0)

虽然Firebase JS SDK现在可以在native native上运行,但它主要是针对Web构建的,并且通常不是本地反应的最佳解决方案。

Firebase Web SDK完全依赖于本机的JS thread运行,因此会影响您的应用程序帧速率(该链接很好地解释了这一点)。

在我的测试中,原生firebase SDK的速度比使用Web SDK快大约2-3倍。

但是除了潜在的性能影响之外,还有很多功能你将无法在Android / ios设备上使用web SDK。例如:

  • 通知/ FCM
  • 离线功能
  • 存储上传/下载
  • Firebase崩溃报告
  • 分析
  • 使用社交认证提供商

最好的方法是使用原生的android / ios firebase sdk运行,并在它们和你的js代码之间建立一个桥梁(即本机模块设置)。

谢天谢地,你不必自己实现,已经有模块可以为你做这个:

例如,

react-native-firebase镜像了web sdk的api js端,但是在本机端使用本机android&amp; ios firebase sdk's。它与您可能已经实现的任何现有firebase js逻辑完全兼容,并且旨在替代web sdk。

(免责声明:我是react-native-firebase的作者)