Привет, Хабр! В этой статье мы расскажем о мобильном приложении для обмена местоположением «Кто/Где». Оно позволяет в реальном времени видеть на карте, где находятся друзья и близкие, быстро и удобно назначая с ними встречи. Важный момент: обмениваться координатами можно только с теми пользователями, которые дали на это согласие. Подробности, как всегда, под катом.

Для кого и зачем создавалось «Кто/Где»

Геосоциальные карты начали набирать популярность несколько лет назад. По нашим оценкам, подобными приложениями сейчас пользуется порядка 9 млн человек в России, за прошедший год рост составил 40%.

Информационная безопасность крайне важна для современных пользователей. И здесь стоит отметить, что наша программа — не для того, чтобы за кем-то следить. Можно сказать, что это продукт про горизонтальные peer-to-peer-отношения, где каждый добровольно делится своей локацией, получая от этого искомую выгоду: быстрый доступ к местонахождению своих друзей и спокойствие за близких. «Кто/Где» позволяет видеть, где находятся близкие и друзья, что они планируют делать, и оперативно присоединяться к ним.

Для кого создавалось приложение? Вот несколько сценариев:

  • подвижная общительная молодёжь. Молодые люди 18-30, без детей, живущие в городах. Предпочитают проводить свободное время в компании друзей. Могут просто гулять, тусоваться в клубе, вместе сходить на какие-нибудь мероприятия. Приложения категории «геосоциальные карты» используют для того, чтобы быстро сориентироваться, с кем и где сейчас можно потусоваться

  • взрослые семейные люди 30-50 лет со здоровыми отношениями внутри семьи. Могут иметь детей 10+ лет и/или престарелых родителей. Приложение используют для взаимной заботы друг о друге: супруге, родителях, детях. Для этой категории важно знать, что с близкими всё в порядке

Есть и промежуточные кейсы. Например, недавно мы узнали о том, что велосипедисты, предпочитающие шоссейных «железных коней», оставляют свои координаты знакомым при помощи приложения. Зачем? Ездить по шоссе на велосипеде достаточно опасно, и если что-то случается, близкий человек быстро об этом узнаёт и вызывает помощь.

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

Сценариев использования достаточно много. Важно то, что в приложении — актуальные карты, данные обновляются в реальном времени. Система показывает не только последнюю зафиксированную точку, но и процесс движения пользователя. Программа использует GPS- и LBS-координаты, благодаря этому при потере сигнала GPS местоположение пользователя не будет искажено, программа зафиксирует последние точные координаты, что исключает возможность «телепортаций», характерных для рыночных приложений данной тематики.

Кто работал над проектом?

Мы решили разделить команду на четыре группы:

  1. Разработчики iOS-версии.

  2. Разработчики Android-версии.

  3. Команда бэкенд-модуля, основная функция которого — сбор геолокационных данных, телеметрии.

  4. Команда бэкенд-модуля, отвечающего за социальные взаимодействия между пользователями «Кто/Где».

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

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

Таймлайн, технологии, проблемы и решения

Разработка приложения стартовала в декабре 2023 года. В ходе планирования организации работы мнения разделились. Часть команды предлагала действовать по процессу на основе канбана с недельными итерациями и еженедельными демо. Другая часть выступала за то, чтобы просто обсудить, что нужно сделать, поделить зоны ответственности и начать оперативно работать, возможно, даже без задач в джире. В итоге СТО сказал, что выбирает второй сценарий и мы разошлись писать код.

Тогда же появились и первые проблемы — как с фронтендом, так и с бэкендом. В первом случае сложность была в том, что на старте разработки не было дизайнов. Это сильно мешало разработчикам — они были вынуждены использовать сырые макеты. А значит, им приходилось регулярно что-то переделывать, когда бизнес требовал внести изменения после очередного витка обсуждений.

Во втором случае работа над сервисами, отвечающими за хранение и обработку локаций, велась слишком медленно. Решили перейти на Python для части бэкенда ради ускорения работы, причём эту часть взял на себя CTO. С геолокацией были и другие проблемы. Основная заключалась в сборе геолокационных данных в фоне, это далеко не тривиальная задача. Здесь мы встретили три основных «подводных камня»:

  • фрагментированность Android и вообще мобильных ОС, ведь у каждой системы свои механики работы с геолокационными данными

  • проблемы с разрешением сбора этой информации в фоне

  • скачки GPS-геолокации. Иногда пользователя на карте «забрасывает» куда-то очень далеко, т. е. возникает ошибка, которую нужно учитывать

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

Чуть позже возникла ещё одна проблема, уже с инфраструктурой. Так, мы слишком долго разворачивали свою инфраструктуру с нуля, включающую кубернетис, базы данных, брокеры сообщений и мониторинг поверх этого, прорывались через бюрократические процессы, а ещё не знали точно, сколько потребуется «железа» для инфраструктуры приложения. Провести нагрузочное тестирование на этом этапе мы не могли, поскольку не были готовы сами сервисы. Решили ускориться, переехав в облако, где стали использовать управляемые услуги — тот самый Kubernetes, Redis, Postgres, Kafka.

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

Рабочие процессы стабилизировались в конце января, когда мы подготовили первую версию приложения, развернули инфраструктуру и были готовы релизиться. Но возникла новая сложность — не было готово доменное имя для бэкенда. Для решения проблемы решили использовать доменное имя для тестового окружения. Но выяснилось, что процесс переключения IP-адреса этого доменного имени на продовое окружение займёт 2 недели, поэтому мы срочно переназвали тестовое окружение продом и докинули туда ресурсов.

В конце января отправили первую версию приложения на проверку, она заняла больше недели, но апп одобрили. Первая версия в маркете получила немного функций, основные — шеринг локации пользователя и отображение локаций контактов пользователя из «Кто/Где». В феврале 2024 года появились первые скачивания и пользователи. Нужно было начинать наращивать на MVP фичи. Мы так и поступили, в марте реализовали ещё две фичи — статус пользователя и возможность поделиться своим профилем по ссылке.

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

Что уже готово и что планируется внедрить в будущем?

Сейчас мы рады тому, что пользователей стало много. Также возникли новые неожиданные проблемы, о которым мы даже не думали на этапе проектирования и которые вскрылись под нагрузкой. Например, медленный DNS в кубернетисе, зависающие транзакции в статусе ClientRead, пропадающие логи. Все они связаны с растущей нагрузкой на инфраструктуру. Ближайшие несколько недель посвятим решению сложностей.

Но главное то, что в базовом функционале приложение уже доступно для устройств на iOS и Android. В будущем в «Кто/Где» мы добавим дополнительные сервисы для друзей: статусы, планы, события, стикеры и сообщения.

Если у вас есть вопросы или замечания по теме статьи, будем рады комментариям, постараемся всё обсудить.

Комментарии (8)


  1. Dolios
    23.05.2024 16:28
    +3

    Чем ваш велосипед отличается от Google Location Sharing? Я понимаю, что вы хотите больше данных пользователей, но для самих пользователей в чем профит?


    1. savostin
      23.05.2024 16:28

      Вот, кстати, далеко они его спрятали на самом деле. И, опять же, показывает только текущую позицию - пропал сигнал и не узнать где был недавно. Не сказал бы, что Google сделал это удобно.


      1. Dolios
        23.05.2024 16:28

        Мне показывает последню затреканую позицию и время, когда она была затрекана. Вот, например:


        1. savostin
          23.05.2024 16:28

          Хммм, Android? У меня на iOS ничего такого...


          1. Dolios
            23.05.2024 16:28
            +1

            Да, Android, как на iOS не знаю. Точнее, Android у человека, чья геолокация на скрине, а сам скрин вообще сделан с компа в браузере )


  1. exTvr
    23.05.2024 16:28
    +1

    Ой.

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

    Чёрное зеркало.


    1. enamchuk
      23.05.2024 16:28
      +3

      Ещё у МТС есть крайне поганая услуга "Я на связи" которая не отображается в Личном Кабинете, но она работает - при звонке абоненту МТС, если он недоступен, и потом при появлении его в сети, МТС от имени и номера этого абонента совершает секундный дозвон.
      Несколько раз мне звонили, когда я был недоступен днём, включал смартфон ночью и ночью получали такие дозвоны люди, звонившие мне раньше, и потом на утро были неприятные разговоры о том, что я людям ночью звоню.
      Чтобы отказаться от такого, предлагают подключить услугу "Запрет Я на связи" за абонплату.
      При этом можно было бы отключить услугу бесплатно, отменив переадресацию по недоступности, но настройки сети МТС запрещают выключать переадресацию - при отключении переадресации (средствами смартфона, GSM-кодами, через ЛК - не важно) устанавливается переадресация на служебный номер +79168920892.
      В "поддержке" МТС также отказываются отключить переадресацию полностью.


  1. yappari
    23.05.2024 16:28
    +4

    Вот они на что денежки тратятся. Подняли абонплату на 60%, мол обслуживание и всё такое. И ладно бы можно было отключить неиспользуемое (мне, например, на их симке не нужен инет - но хрен бы там, без вариантов. Хотя на другом операторе - без проблем). 20 лет был абонентом, но видимо надо переключаться.