Подтвердить что ты не робот

Ошибка при запуске Firebase 3.0 с помощью React Native

Только что загруженная firebase 3.0 с реакцией-native и получение ошибки

[fatal] [tid: com.facebook.react.RCTExceptionsManagerQueue] Необработанный Исключение JS: невозможно найти переменную: document

Поддерживается ли реакция-родная?

Код на основе реакции:

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)
4b9b3361

Ответ 2

В новейшей версии firebase используются переменные документа, которые используются в веб-приложениях, и RCTWebSocket или RCTView не работают одинаково. (Я не уверен на 100% обо всех деталях). Во всяком случае, вы можете просто установить более старую версию firebase, и она будет работать для вас. Предполагая, что вы установили npm, следуйте этим инструкциям.

  • Удалите Firebase из вашего проекта с реакцией npm удалите firebase --save
  • Установить версию 2.4.2 firebase npm install [email protected] --save
  • Счастливый Firebaseing!

Ответ 3

Firebase 3.x не поддерживается в RN (пока..).

Проблема

Я думаю, что проблема связана с зависимостью модуля auth от переменной браузера window.

Будет ли она официально поддерживаться?

Согласно следующей теме обсуждения из команды Firebase, они в настоящее время работают над поддержкой 3.x. Тем не менее, не установлены временные рамки выпуска.

Обсуждение групп Google.

Обходные

Вариант 1 (с FB 2.x)

От Джейкоба Венгера:

Если React Native поддерживает блокировку для вас, пожалуйста, продолжайте использовать 2.x.x SDK, пока мы не разрешим эту проблему. SDK 2.x.x продолжайте работать, даже после перехода на новую консоль. `

Вариант 2 (с FB 3.x)

От Джейкоба Венгера:

Как "обходной путь", если вам не нужен auth (маловероятно, я знаю, но все же стоит упомянуть), вы должны быть в состоянии сделать следующее:

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

Ответ 4

Мне удалось загрузить Firebase 3.0.2 в React Native, поместив следующее в файл .js и импортировав его в начало index.ios.js:

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

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

Могут быть другие gotchas - я не исследовал дальше этого, но он может заставить Firebase 3 работать на вас.

Ответ 5

Чтобы использовать последнюю версию Firebase с помощью ReactNative, вы можете использовать Firebase Bridge.

У меня есть демонстрационное приложение здесь.

Ответ 6

В то время как Firebase JS SDK теперь работает над реакцией native, он в основном создан для Интернета и, как правило, не является лучшим решением для реагирования.

Firebase Web SDK полностью работает над реагированием на собственный поток JS, поэтому влияет на частоту кадров вашего приложения (ссылка объясняет это хорошо).

В моих тестах SDK родной firebase был примерно в 2-3 раза быстрее, чем использование веб-SDK.

Но помимо потенциального воздействия на производительность есть много функций, которые вы не сможете использовать с веб-SDK на устройствах Android и ios. Например:

  • Уведомления /FCM
  • Автономные возможности
  • Загрузка/загрузка хранилища
  • Отчеты о сбоях Firebase
  • Google Analytics
  • Использование поставщиков социальной аутентификации

Лучшим подходом было бы работать с родным sdk android/ios firebase и иметь мост между ними и вашим js-кодом (т.е. настройка собственного модуля).

К счастью, вам не нужно выполнять это самостоятельно, там уже есть модули для этого:

react-native-firebase, например, зеркалирует сторону sdk api js в сети, но выполняется с внутренней стороны с использованием родных android и ios firebase sdk's, Он полностью совместим с любой существующей логикой jb firebase, которую вы, возможно, уже реализовали, и предназначен для замены веб-sdk.

(отказ от ответственности: я являюсь автором реакции-родной-firebase)