首页 文章

使用React Native运行Firebase 3.0时出错

提问于
浏览
23

刚刚使用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 回答

  • 2

    最新版本的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!

  • 8

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

    release notes .

  • 1

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

    global.location = {
      href: ''
    };
    global.screen = {
    
    };
    global.document = {
      getElementsByTagName: function(){}
    };
    global.parent = global;
    

    可能还有其他陷阱 - 我没有进一步探讨,但可能会让Firebase 3为您工作 .

  • 0

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

    问题

    我认为这个问题与 auth module 's dependency on the browser' s window 变量有关 .

    它会得到官方支持吗?

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

    Google Groups Discussion .

    解决方法

    选项1(使用FB 2.x)

    来自Jacob Wenger:

    如果React Native支持对您来说是阻止,请继续使用2.x.x SDK,直到我们解决此问题 . 即使在您迁移到新控制台之后,2.x.x SDK仍将继续工作

    选项2(使用FB 3.x)

    来自Jacob Wenger:

    作为一种“解决方法”,如果你不需要auth(不太可能,我知道,但仍然值得一提),你应该能够做到以下几点:var app = require('firebase / app'); var database = require('firebase / database');

  • 2

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

    我这里有一个演示应用程序 .

  • 13

    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的作者)

相关问题