Маркетинг стал частью мира разработки. По количеству звездочек на GitHub определяют, какое из похожих друг на друга решений круче, а по количеству твитов можно спрогнозировать, какая технология будет развиваться в ближайшие полгода. В таких условиях мы рискуем стать жертвами хайпа, что мы в Лайв Тайпинге и сделали, принимая Firebase за Священный Грааль, способный решить все проблемы разом: сбора статистики, интеграции чатов, выбора базы данных, быстрой разработки MVP. Когда же я столкнулся с этим сервисом в бою, то понял, что моё представление о Firebase расходилось с реальностью настолько сильно, что понимание области применения технологии стало для меня настоящим откровением. Я хочу поделиться этим пониманием и тем, как всё-таки использовать Firebase правильно.
Желание поработать с Firebase появилось у меня давно, но я ждал подходящего проекта. И дождался: MVP системы бронирования офисов. Так как это MVP, бизнес-логика бэкендa довольно примитивная. К тому же к Firebase будет подключаться мобильное приложение на iOS. С виду идеальный случай для использования сервиса, но в ходе реализации пришлось столкнуться с некоторыми проблемами, о которых и пойдёт речь дальше.
Что такое Firebase, и зачем он вам?
Но сначала хотелось бы устранить все недопонимания. Вот две вещи, которые нужно усвоить для работы с Firebase:
- это не бэкенд, а база данных. Можете забыть о тех чудо-примерах приложений на Firebase без серверной части, это пока недостижимо;
- это NoSQL со всеми его преимуществами и недостатками.
- его область применения намного меньше, чем у NoSQL-решения;
- Firebase сильно ограничивает вас при выборке данных и при необходимости записать данные в несколько мест одновременно;
- далеко не со всеми структурами данных удобно работать в Firebase.
Преамбула
Представим, что вы разрабатываете систему бронирования для сети отелей.
Там есть такие сущности:
- отель
- номер
- клиент
- бронь
Как реализовать это на NoSQL (Firebase)? Можно попробовать вложить сущности в друг-друга:
Тут начинают возникать вопросы: а стоит ли вкладывать все букинги в номер? а куда вкладывать клиентов? И т.п. Проблема NoSQL зачастую в том, что данные приходится дублировать.
Есть второй вариант: попытаться использовать NoSQL схожим с SQL способом и создать в корне объекты для каждой сущности, а связи поддерживать, храня id других объектов.
Вероятно, в других NoSQL-базах бороться с этими проблемами проще, но решения для своих задач я в Firebase не нашёл.
Какой бы вариант вы не предпочли, у них есть одинаковая проблема: невозможность сделать сложную выборку данных. Что делать, если вы хотите получить список бронирований конкретного клиента? Эти бронирования могут оказаться вложенными в разные номера и отели, а если структура плоская, то Firebase не сможет отфильтровать данные по нескольким параметрам (эту проблему даже обсуждали на StackOverflow). В общем, если вы хотите сделать выборку по клиенту и дате бронирования, Firebase SDK вам ничем не поможет.
Что такое Firebase realtime database
Можно попытаться решить эту проблему на бэкенде, но тогда вам придётся выкачивать выборку данных, отфильтрованных по одному параметру, и фильтровать её дальше самостоятельно. Это неприемлемо.
Что делать?
Не использовать Firebase для сложной выборки данных. В этом нам может помочь собственный бэкенд на Node.js и один из нижеописанных инструментов.
ElasticSearch
Это поисковый движок с JSON REST API, использующий Lucene и написанный на Java. Подробности можно почитать на официальном сайте, а мы сразу начнём рассматривать его в связке с Firebase.
Установка
Нужно поставить ElasticSearch на сервер (сделать это по инструкции будет несложно). После нужно интегрировать его с Firebase, а именно — создать поисковый индекс из базы Firebase. Я использовал официальную интеграцию от Firebase. Для запуска нужно скачать репозиторий, установить зависимости и заполнить config с ключами для Firebase.
В этом решении я нашел несколько минусов:
- это отдельное приложение на Node.js, и его сложно связать с бэкендом;
- создать правильный индекс для ElasticSearch непросто, и одной синхронизацией данных с базой Firebase не обойтись;
- типы полей присваиваются автоматически.
ElasticSearch бесплатен и разворачивается на своём подконтрольном сервисе — это плюс. Но вместе с тем возникает ряд проблем с деплоем и безопасностью, которые нужно продумать заранее.
Пример: открыт порт, используемый Elastic Search для внешних запросов. Это создаёт уязвимость, так как этот же порт используется для записи и управления поисковыми индексами. Возможным результатом такого недосмотра станет удаление поискового индекса или внесение в него своих данных. Поэтому изначально этот порт открыт только для запросов с той же машины, на которой установлен ElasticSearch.
Сделаем вывод: вопрос того, как реализовать взаимодействие между пользователем, ElasticSearch и бэкендом, ложится на плечи разработчика.
Algolia
SaaS-решение для поиска. Платное, но с бесплатным планом. С прайсом и прочими деталями можно ознакомиться на официальном сайте.
Интеграция с Firebase реализована при помощи официальной js-библиотеки. Процесс установки и запуска подробно описан в readme, и у меня всё заработало с первой попытки.
Выглядит интеграция примерно так:
var algoliasearch = require(‘algoliasearch’); … var client = algoliasearch(config.algolia.applicationID, config.algolia.apiKey); // инициализируем Algolia var indexRooms = client.initIndex(‘rooms’); // инициализируем поисковый индекс Algolia rooms.once(‘value’, initInde); // rooms — это reference к объекту в Firebase function initIndex(dataSnapshot) < var objectsToIndex = []; // Этот массив мы отправим в Algolia var values = dataSnapshot.val(); // Получаем значение snapshot’a for (var key in values) < // обрабатываем каждый room if (values.hasOwnProperty(key)) < var firebaseObject = values[key]; firebaseObject.objectID = key; // id объекта в Algolia должен совпадать с ключом в Firebase objectsToIndex.push(firebaseObject); // добавляем в массив >> indexRooms.saveObjects(objectsToIndex, function(err, content) < if (err) < console.log(‘error’); return; >console.log(‘success’); return; >); >
В результате мы получаем поисковый индекс в Algolia, содержащий все объекты rooms из Firebase. Обратите внимание, что по ходу импорта данные можно обработать дополнительно, например подтянуть название отеля из другого объекта в базе данных.
После того, как мы создали индекс, мы не собираемся обновлять его целиком, поэтому в дальнейшем следим за событиями в Firebase и обрабатываем их:
rooms.on(‘child_added’, addOrUpdateObjectRooms); rooms.on(‘child_changed’, addOrUpdateObjectRooms); rooms.on(‘child_removed’, removeIndexRooms);
Единственный минус в использовании Algolia в том, что за SaaS нужно платить. Но для MVP бесплатного тарифа должно быть достаточно, а делать на Firebase масштабный проект мало кому придёт в голову (я надеюсь).
В противовес этому сомнительному минусу мы получаем удобную админку с доступом к аналитике, поисковому индексу и нюансам работы поисковых запросов.
Важным плюсом является наличие SDK под всё и вся — от мобильных платформ до фреймворков для бэкенда. В суть я не вникал, но iOS-разработчик сказал: это удобнее, чем REST.
Я советую вам попробовать именно Algolia: интеграция с Firebase лучше, установка проще, а в довесок мы получаем консоль с аналитикой и SDK. Я оставил без внимания технические детали и не анализировал производительность и скорость, это сложная и отдельная тема.
Итоги
Выгоды этой довольно простой системы ощутимы. Мы получаем:
- Firebase для хранения данных, всех операций чтения и простых неконкурентных запросов;
- Node.js для всех конкурентных запросов и сложной бизнес-логики + обслуживания Algolia/ElasticSearch;
- Algolia/ElasticSearch для поиска и сложной выборки данных.
При условии грамотного использования Firebase становится вполне приемлемым решением для доступа и хранения данных. Всегда помните, что данные первичны, и если вы выбрали неправильную структуру данных или способ работы с ними, вас ждут серьёзные проблемы в разработке.
Жду в комментариях ваших историй об интеграции Firebase и замечаний по статье. Спасибо!
Источник: habr.com
Артём Саннников
Firebase в общем виде представляет облачную систему управления базами данных, класса NoSQL, которая позволяет разработчикам приложений выполнять хранение и синхронизацию данных между несколькими пользователями в реальном времени. Так же, Firebase поддерживает интеграцию с приложениями, которые работают под управлением операционных систем Android и iOS, и все это реализовано при помощи API.
На данный момент API реализовано для приложений, которые написаны на JavaScript, Java, Node.js и Objective-C. Но помимо работы с API, возможно работать напрямую (в реальном времени) с базой данных в стиле REST из ряда JavaScript-фреймворков, как например: AngularJS, React, Vue.js, Ember.js и Backbone.js.
Для обеспечения безопасности передачи данных от сервера к клиенту, и наоборот, было предусмотрено API для шифрования данных.
Помимо прочего, Firebase предоставляет ещё и хостинг для хранения статических файлов (таких как изображения, файлы стилей, скрипты и т.д), обеспечивающий доставку через CDN (сети доставки контента).
Источник: artemsannikov.ru
Начинаем работать с Firebase на Android
Ashraff Hathibelagal Last updated Sep 30, 2016
Read Time: 8 min
Для мобильных приложений необходим сервер для выполнения таких задач, как проверка подлинности пользователей и синхронизация пользовательских данных на нескольких устройствах. Однако для создания такого сервера требуется набор навыков, которого не хватает большинству независимых разработчиков приложений. К счастью, есть несколько back-end как сервисных платформ, которые часто называют BaaS, которые вы можете использовать сегодня. Firebase от Google — одна из таких платформ.
Firebase бесплатно предоставляет такие важные услуги, как аналитика, отчеты о сбоях, аутентификация пользователей и облачные сообщения. Его услуги freemium включают в себя базу данных NoSQL в режиме реального времени, хостинг файлов и статический хостинг веб-сайтов.
В этом уроке я покажу вам, как добавить аутентификацию пользователей, аналитику и удаленное хранилище данных в приложение Android с помощью Firebase.
Предпосылки
Чтобы следовать материалу, вам понадобятся:
JavaScript
Используем Firebase в качестве Back-End
Реджинальд Доусон
Мобильное приложение
Мобильные приложения с Ionic и Firebase
Реджинальд Доусон
1. Использование Firebase Analytics
Firebase Analytics является одним из самых популярных решений для аналитики мобильных приложений, доступных сегодня. Используя его, вы можете получить точное представление о том, кто ваши пользователи и как они используют ваше приложение.
Шаг 1: Настройка Firebase Analytics
В последних версиях Android Studio есть встроенная поддержка Firebase Analytics. Это означает, что вы можете добавить Firebase Analytics в свой проект, не покидая Android Studio.
Чтобы начать интеграцию Firebase Analytics с вашим проектом, нажмите «Сервис»> «Firebase». Вам будет предоставлено следующее окно помощника:
Нажмите «Аналитика», а затем «Зарегистрировать событие Analytics».
Теперь вы должны связать свой проект Android Studio с проектом Firebase. Поэтому нажмите кнопку «Подключиться к Firebase».
В появившемся диалоговом окне вы сможете увидеть все существующие проекты Firebase. Вы можете выбрать один из них или выбрать новый проект. На данный момент я предлагаю вам выбрать вариант «Создать новый проект Firebase» и дать уникальное имя проекту.
После нажатия кнопки «Подключиться к Firebase», которая находится внутри диалогового окна, Android Studio автоматически выполнит все необходимые изменения конфигурации, такие как создание файла google-services.json и загрузка SHA1.
Теперь вы можете нажать кнопку Добавить Google Analytics, чтобы добавить плагин Firebase и зависимость Firebase Core к вашему проекту. Android Studio покажет вам точные изменения, которые будут внесены в файлы build.gradle.
Нажмите «Принять изменения», чтобы завершить настройку.
Шаг 2: Создание событий Analytics
После того, как вы настроили Firebase Analytics для своего приложения, вам не нужно писать какой-либо дополнительный код, если вас устраивают только автоматически созданные события аналитики, такие как пользователь, открывающий ваше приложение в первый раз, использование приложения дольше чем 10 секунд, совершение покупки в приложении или удаление приложения. Таким образом, вы можете запустить приложение сейчас — на эмуляторе или на реальном устройстве — и в течение следующих 24 часов вы сможете увидеть журналы аналитики в консоли Firebase.
Если вы хотите более внимательно проанализировать поведение своих пользователей, вы можете создавать собственные события аналитики вручную, используя метод logEvent() класса FirebaseAnalytics . Метод ожидает два параметра: строку, определяющую имя настраиваемого события, и Bundle , содержащий сведения о событии в виде пар ключ-значение.
Например, если вы хотите генерировать событие с именем my_custom_event каждый раз, когда пользователь нажимает на определенную кнопку, вам нужно добавить следующий код в обработчик кликов кнопки:
// Create an instance of FirebaseAnalytics
FirebaseAnalytics fa = FirebaseAnalytics.getInstance(this);
Источник: code.tutsplus.com