Обложка: Создание pet-проекта на Flutter и Firebase. Почему сделали такой выбор?

Создание pet-проекта на Flutter и Firebase. Почему сделали такой выбор?

Александра Коларска

Александра Коларска

Руководитель отдела маркетинга SPB TV. Создатель и маркетолог проекта Success Story.

Вместе с коллегами мы делаем pet-проект Success Story Diary. Это мобильное приложение-дневник для записи достижений и благодарностей. В нём есть персональные напоминания, календарь записей, таймер на 2 минуты и мотивационные цитаты. Приложение уже доступно в AppStore и Google Play, сейчас у него чуть больше 1000 скачиваний. На лендинге проекта есть ссылки на скачивание приложения.

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

Мы взяли за основу цикл формирования привычки из книги The Power of Habit: Reminder — Routine — Reward. Работу с дневником делали по похожей схеме: сначала появляется напоминание с мотивирующим текстом, которое по диплинку переводит пользователя сразу в поле для записи. Затем автоматически запускается таймер на две минуты для быстрой заметки (при желании его можно отключить). После сохранения записи, пользователь видит мотивирующую цитату — это награда, которой он может поделиться.

Проект написан с использованием мультиплатформенного фреймворка Flutter. Это позволило выпустить Android и iOS приложения одновременно с одной кодовой базой. Для проекта выбрали «BloC» архитектурный подход. В качестве серверной части использовали сервисы Firebase: Authentication, Hosting, Storage, Cloud Firestore, Cloud Functions и другие.

Почему мы делаем такой pet-проект?

Для мобильных pet-проектов сложно найти инструмент лучше Flutter. В процессе разработки мы выявили плюсы этого фреймворка, которые выгодно отличают его от, например, Reactive Native:

  • Flutter сам рендерит весь UI, не используя системные компоненты iOS или Android. Это позволяет не делать кастомный код отдельно под каждую платформу. Так что на Flutter проще создавать единый UI сразу для обеих мобильных платформ. При этом некоторые особенности каждой платформы учитываются автоматически. Например, различие в поведении скроллинга или выделение и копирование текста;
  • скорость запуска и работы приложения на Flutter сравнима с показателями нативных приложений. Но Reactive Native использует нативные компоненты платформы, в которые передаёт события через специальные мосты из JavaScript кода. Из-за чего скорость запуска и работы может замедляться. Мы же стремились создать приложение с красивыми анимациями, которое бы одинаково быстро запускалось и работало как на слабых, так и на современных устройствах;
  • всю техническую часть реализовывал один разработчик, который специализируется на Android, поэтому Dart казался ближе по духу к мобильной разработке, чем JS. Но после реализации стало понятно: разработка на Dart и Flutter гораздо ближе к JS и веб-разработке, чем к классической мобильной разработке на Kotlin или Swift;
  • Google активно поддерживает и развивает Flutter. У него есть подробная документация с примерами и обучающими материалами. Ещё на днях вышел публичный релиз Flutter 2.0 где появилось много нового и интересного. Например: поддержка приложений для Web и null-safety.

Почему BloC?

BloC, пожалуй, самый популярный подход в разработке на Flutter на текущий момент. С его помощью можно организовать работу с асинхронным получением данных из сети и обновлять UI через стандартный Flutter-виджет StreamBuilder. При этом BloC помогает обуздать «‎хаос» в коде приложения и оставаться верным принципам clean architecture.

Почему Firebase?

У нас нет большого штата и отдельного бэкенд-разработчика. Поэтому выбрали serverless-подход и использовали Firebase для:

  • облачного хранения данных приложения;
  • авторизации через разные источники (Google, Facebook, Apple);
  • удалённого управления настройками приложения;
  • запуска A/B тестирования;
  • рассылки push-нотификаций;
  • хостинга лендинга;
  • аналитики приложения и других полезных фич, в том числе для запуска Cloud функций.

Практически любую потребность в серверной поддержке для мобильных приложений можно реализовать через Firebase. Кроме этого, есть возможность подключить Google Cloud функции.

Какие советы можно дать тем, кто начинает свой pet-проект на Flutter и Firebase?

  • сразу подключайте к проекту Firebase Remote Config и добавляйте в него всё, что может поменяться со временем: хостинг бэкенда, идентификаторы in-app покупок, различные значения по умолчанию и так далее. Это позволит модифицировать поведение уже выпущенных клиентов и не потерять их, например, при переезде бэкенда на другой хостинг в будущем или при временной недоступности основного сервера. Плюсы такого подхода ещё и в том, что Remote Config полностью бесплатен, а доступность и надежность его обеспечивает Google;
  • в качестве базы и API для текстовых данных можно использовать обычные Google-таблицы. Например, из такой загружается список цитат в нашем приложении. Для получения данных можно использовать CSV-выгрузку. К тому же таблицы удобно редактировать и добавлять новые записи из веб-интерфейса без участия разработчика. И, главное, это абсолютно бесплатно, в отличии от использования базы из Firebase;
  • не забывайте обновлять pub-пакеты для Flutter. Платформа и компоненты обновляются достаточно часто: исправляются старые недочеты и добавляется полезная функциональность.

В ходе работы мы пришли к выводу, что правильно выбрали фреймворк. Он позволил создать приложение силами одного Android-разработчика, а также запустить его почти без изменений на iOS и Android, и обеспечить работоспособность на уровне нативных приложений. Конечно, в процессе мы столкнулись с различными нюансами работы с Flutter и Firebase, но они позволили реализовать задуманное.