Создание сервиса началось с гуманистической идеи обеспечить «Защиту, доступную каждому», но у бизнеса есть и понятная финансовая цель. Разработка геолокационного сервиса, двух мобильных приложений и API-сервера соединяющего всю систему — дорогой проект. Было решено двигаться итерациями: сначала разработать MVP, на котором были протестированы главные гипотезы. Было разработано тех-превью, собрана база заинтересованных пользователей и охранных предприятий и даже заключены первые «договоры о намерениях»Сейчас стадия MVP практически пройдена, и в сторах Apple и Google доступны реальные полноценные приложения, а сервер готов принимать тысячи подключений.Партнерами сервиса являются несколько десятков лицензированных частных охранных предприятий. Распределение вызовов происходит по аукционной модели — это значит что возможность отправиться на вызов в первую очередь получат экипажи наиболее подходящие по целому ряду параметров: геопозиции, опыту, рейтингу, скорости реакции и других.Группы быстрого реагирования пользуется специальным приложением-навигатором для принятия вызовов, отслеживания перемещения и экстренной связи с пользователем.
С точки зрения системной архитектуры, проект представляет собой 4 приложения: 2 для iOS и 2 – на базе Android, сервер REST API, служебные микросервисы (мессенджер, “аукцион” вызовов, геолокационный, и прочие), биллинговый сервис и внутренний портал для работы с охранными предприятиями.
В основе сервиса лежит геоинформационный блок. Мы построили гексагональную модель — так городская среда разбивается на эффективные для поиска и сравнения шестиугольные участки.
До окончательного выбора стека мы разработали тех-превью основных функций на разных языках программирования (python, go, javascript) и БД. Одни технологии давали более высокую производительность, другие обеспечивали лучшую устойчивость при нагрузках. Для определенных связок существует больше готовых модулей именно для geospatial-сервисов. Мы остановились на технологиях, набравших наибольшее количество баллов в наших бенчмарк-тестах.
REST API-сервер крутится на быстром node.js (+ сокеты), база данных PostgreSQL позволяет прозрачно работать с гео-данными, на Laravel написаны интерфейсы внутренних сервисов в закрытом контуре. Очереди на RabbitMQ, кеширование в memcached.
Для разработки мобильных приложений мы выбрали Flutter, с отдельными блоками, написанными на Kotlin и Swift для соответствующих платформ.Интерфейс приложений быстрый и отзывчивый: стейт менеджер Riverpod позволяет обновлять только необходимые виджеты. Реализована декларативная навигация с помощью Navigator 2.0.
Генерация моделей и иммутабельных состояний реализуется через freezed.
Пакеты DIO и Datz позволяют эффективно и корректно обрабатывать ошибки без лишних проверок.
Целым квестом была борьба с политикой Android — OS хочет выгружать приложение из памяти, отключать permissions и прочие полезные оптимизации, которые в случае приложения для личной безопасности только мешают. На эксперименты было потрачено порядка 300 часов, в результате которых удалось «договориться» с системой.
Подключен интернет эквайринг с возможностью рекуррентных платежей.
Системы аналитики Firebase и Yandex Appmetrica настроены на получения всей необходимой телеметрии.
Мы также разработали виджеты, благодаря которым пользователь клиентского приложения может совершить вызов с домашнего экрана без запуска основного приложения, а экипаж ГБР свернуть приложение, оставив активным только интерфейс принятия вызова.
Для того, чтобы интерфейс был удобным, мы провели кастдев с двумя группами пользователей, а прототипы прошли три полных цикла переработки от исходной концепции. Результатом стал дизайн приложений, который интуитивно понятен пользователям.
Главной проверкой стало выполнение сценария, когда пользователь находится в движении и в состоянии стресса, а на выполнение запроса есть только 10 секунд.