Ответ 1
Firebase JS SDK 3.1 только что выпущен и теперь совместим с 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)
Firebase JS SDK 3.1 только что выпущен и теперь совместим с React Native!
См. примечания к выпуску.
В новейшей версии firebase используются переменные документа, которые используются в веб-приложениях, и RCTWebSocket или RCTView не работают одинаково. (Я не уверен на 100% обо всех деталях). Во всяком случае, вы можете просто установить более старую версию firebase, и она будет работать для вас. Предполагая, что вы установили npm, следуйте этим инструкциям.
Firebase 3.x не поддерживается в RN (пока..).
Я думаю, что проблема связана с зависимостью модуля auth
от переменной браузера window
.
Согласно следующей теме обсуждения из команды Firebase, они в настоящее время работают над поддержкой 3.x. Тем не менее, не установлены временные рамки выпуска.
Вариант 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');
Мне удалось загрузить 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 работать на вас.
Чтобы использовать последнюю версию Firebase с помощью ReactNative, вы можете использовать Firebase Bridge.
У меня есть демонстрационное приложение здесь.
В то время как Firebase JS SDK теперь работает над реакцией native, он в основном создан для Интернета и, как правило, не является лучшим решением для реагирования.
Firebase Web SDK полностью работает над реагированием на собственный поток JS, поэтому влияет на частоту кадров вашего приложения (ссылка объясняет это хорошо).
В моих тестах SDK родной firebase был примерно в 2-3 раза быстрее, чем использование веб-SDK.
Но помимо потенциального воздействия на производительность есть много функций, которые вы не сможете использовать с веб-SDK на устройствах Android и ios. Например:
Лучшим подходом было бы работать с родным sdk android/ios firebase и иметь мост между ними и вашим js-кодом (т.е. настройка собственного модуля).
К счастью, вам не нужно выполнять это самостоятельно, там уже есть модули для этого:
react-native-firebase, например, зеркалирует сторону sdk api js в сети, но выполняется с внутренней стороны с использованием родных android и ios firebase sdk's, Он полностью совместим с любой существующей логикой jb firebase, которую вы, возможно, уже реализовали, и предназначен для замены веб-sdk.
(отказ от ответственности: я являюсь автором реакции-родной-firebase)