«Я всегда боялся злых собак и реляционных баз данных». Что может сделать мобильщик в одиночку с помощью Google Firebase

Колонка
17 ноября 2018, 10:55

Android-разработчик Константин Конопко запустил сервис для аренды вещей Keeple и написал для Dev.by колонку о том, как создавать «новые классные штуки» при помощи Google Firebase.

Как не опоздать на вечеринку с помощью Firebase

Как разработчик мобильных приложений я долгое время был ограничен возможностями платформы, в моём случае — Android.

​карьера константина конопко:

  • В компании Adani писал софт для багажных сканеров, которые сейчас стоят в минском метро.
  • Независимый Android-разработчик.
  • Работа в ITS Partner на позиции Android-разработчика.
  • Свой проект — соцсеть для аренды вещей Keeple, снова инди-разработка.

Кое-кто даже называет мобильщиков фронтэндом. Но плох тот солдат, который не мечтает стать генералом. В нашем случае, как мне кажется, найдётся достаточно много мобильных девелоперов, которые хотели бы иметь возможность создавать полноценные сервисы, с удалённым хранением данных.

Без сомнения, найдутся люди, способные сделать всё сами: создать мобильное приложение, собственноручно настроить сервер и написать REST. Может быть, это вы? Мои поздравления! Но это точно не я.

Мой опыт настройки LAMP, давно и счастливо забытый, вспоминается мне как жуткий кошмар. Поэтому сейчас я просто в восторге от появления бессерверных решений, об одном из которых я и расскажу. А именно про Google Firebase.

Идея создания Keeple — сервиса, который позволяет арендовать у других пользователей вещи и книги — родилась у меня давно.

Ещё в те времена, когда было модно купить виртуальный сервер и «конфигить» его весь уикенд, вместо того чтобы поехать на вечеринку (надеюсь, вы помните этот бородатый анекдот). А потом появились AWS и Firebase. Тут выяснилось, что до конца моего контракта остаётся совсем немного, и вот он — подходящий момент, чтобы попробовать новые классные штуки.

Итак, начнём. Вы уже можете начинать собираться на ту самую вечеринку, куда обычно не попадают любители Linux, пока я вам расскажу, как же нам повезло. А повезло нам очень крупно. Заходим в веб-консоль Firebase, создаём проект для разработки, затем проект продакшена. В «конфигах» мобильного проекта делаем две конфигурации: dev и prod. Это, наверно, самое сложное. Да, у вас есть SDK для связи с облаком и он работает! Теперь расскажу про его крутые фишки.

 Бабочка или галстук?

Чем же так хорош Firebase

Поскольку я собирался создавать соцсеть, мне требовался механизм авторизации. В Firebase есть интеграция с популярными провайдерами авторизации, такими как, естественно, сам Google, а ещё Facebook. Последний-то мне и был нужен, чтобы получать из него социальный граф пользователей.

Вход в вашу систему создаётся и настраивается очень быстро. Вы также может поймать событие создания учётной записи в облачном скрипте (Firebase Functions), получить имя пользователя, почту и аватар, и тут же сохранить всё это в вашей прекрасной базе данных реального времени (omg).

Я всегда боялся злых собак и реляционных баз данных. В Firebase у нас имеется прекрасная БД без таблиц, связей и прочих индексов. Возможно, вы спец в базах и хорошо понимаете, куда какую связь нужно бы направить. Однако, как вы можете догадаться, мобильному разработчику это всё не совсем очевидно. Так вот, в Firebase мы получаем базу, которая представляет собой json. Да, тот самый старый добрый json, с которым мы все хорошо умеем работать. Как шутил один коллега: «Кругом джейсон, даже мой Фольксваген ездит на джейсоне!»

Итак, вы имеете простое дерево в качестве БД. Отсутствие таблиц и связей приходится восполнять перекрёстной индексацией, но к этому быстро привыкаешь. Важное замечание: Google рекомендует делать структуру БД как можно более плоской, вместо того чтобы ветвить вглубь. Далее я расскажу почему.

Теперь об очень крутой фишке Firebase — режиме реального времени в вашей Realtime DB (масло-масло).

Суть в том, что вы сразу получаете обновления от узлов базы, как только в них или их ветках произошли изменения. Именно поэтому не рекомендуется сильно ветвить базу, так как вы рискуете получать в своём приложении слишком много данных со всей ветки.

Работает это просто прекрасно: как только ваш френд шарит велосипед или очередную книгу Талеба в Keeple (делает запись данных), вы в своём приложении, предварительно подписавшись на нужную ноду, тут же получаете эти данные. Без RESTа, без ретрофитов, без головной боли. Вы просто пишете и читаете данные. Все конфликты доступа к данным базы разруливает Firebase, и вам вообще не нужно про это думать (но есть и варианты). Пропала связь или упала скорость — вы всё ещё можете пользоваться мобильным приложением, а данные отправятся в базу сразу после восстановления соединения.

А как же облачные скрипты? Их есть у нас. Облачные скрипты называются Functions (функции), пишутся они на чём-то похожем на javascript, но это не точно. Скрипты умеют ловить разнообразные события вашей облачной системы: создание и удаление аккаунта, запись в БД в определённые ноды, а также события cron (его нужно настроить отдельно в Google App Engine). С недавних пор стало возможным вызывать облачные функции напрямую через мобильный SDK, а также снаружи системы. Короче, всё очень гибко.

Кстати, ваше такси уже приехало, и девочкам не придётся слишком долго ждать вас, так как мы почти закончили.

Можно перечислить ещё целую кучу полезных инструментов Firebase, таких как хранилище файлов, аналитика, А/Б тестирование, удалённое управление, ML и анализ бигдаты. Есть много всего, и Google активно поддерживает платформу, регулярно добавляя новое.

Однако моей целью было вовсе не воспеть Firebase сам по себе, но вселить в мобильного разработчика уверенность в том, что сегодня он способен самостоятельно создавать полноценные «живые» приложения с настоящими пользователями и взаимодействием между ними.

В моём случае родилась социальная сеть Keeple, которая призвана сделать потребление более рациональным, а именно позволяет арендовать друг у друга вещи и книги — посмотрите, что у меня получилось.

Что у меня получилось

Keeple призвана сделать потребление более рациональным, а именно -позволяет арендовать друг у друга вещи и книги.

Исторически сложилось так, что я любитель покупать подержанные гаджеты и прочую технику. Ну, потому что разбираюсь. Позднее я узнал, что это называется (не то, что вы подумали, а) рациональным потреблением.

Проект запустился две недели назад, пока что только для Android. Первые пользователи, мои френды из Facebook, помогали тестировать приложение, от них же я получаю некоторую обратную связь. Пока что активность в Keeple небольшая, люди присматриваются к новой концепции — социальный органайзер личного имущества.

Вообще проект в некотором смысле вскрывает «серую зону» личного имущества, создавая дополнительный контекст для общения между людьми.

Конечно, в Keeple вы можете вести учет имущества абсолютно приватно: делать заметки, создавать напоминания. Например, можно добавить своё авто и записывать данные по ТО и прочим расходам (привет, Эверноут).

Ещё в Keeple можно делиться книгами. Я всё-таки решил добавить эту спорную опцию, несмотря на то, что многие уже не покупают «бумагу»: посмотрим, что из этого выйдет.

Проект собирается развиваться не только в сторону шэринга имущества. В сервисе планируется создание рекомендательной системы, «умного» ассистента, который будет советовать вам, например, новые покупки.

Для развития этого направления сейчас я ищу технологического партнёра, готового встроить в Keeple свои интеллектуальные технологии. Конечно, хотелось бы, чтобы это оказались кто-то типа Google или Amazon (как тебе такое, Юрий Мельничек?).

А пока пожелайте проекту удачи. Возможно, у нас вырастет соцсеть с белорусскими корнями, а Цукерберг таки приедет в Минск посмотреть на всё это — я буду стараться.

Кстати, сразу после выпуска первой бета-версии приложения мне удалось взять на несколько дней велосипед у моего знакомого, одного из первых тестировщиков. До этого я не знал, что у него есть велик и его можно арендовать.

Обсуждение