Разработали новое решение на Kotlin Multiplatform, переписали навигацию в Compose и интегрировали чаты в приложение для нетворкинга

А всё ради того, чтобы вы нашли контакты интересных людей с мероприятия, если по какой-то причине ими не обменялись. Ниже расскажем, с какими трудностями столкнулись, как их решали, и как создавали новое решение для реализации чатов на молодой технологии Kotlin Multiplatform.

Разработали новое решение на Kotlin Multiplatform, переписали навигацию в Compose и интегрировали чаты в приложение для нетворкинга

Суровые сибирские разрабы, готовые ко всему

Привет! Это «Софториум» — команда с хардовым подходом в разработке. Мы пишем код с нуля и работаем с легаси-проектами, чтобы помочь компаниям, у которых горят сроки или не хватает специалистов инхаус. За три года мы успели поработать с Sokolov, GOODDY, Prosklad, Неофармом и аптечной сетью «Столички».

О проекте

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

 Выглядит несложно, как и любой мессенджер
 Выглядит несложно, как и любой мессенджер

Провели оценку с проектированием и стартовали

Перенесли все задачи в YouTrack. Собрали команду из четырех разработчиков: один — бэкенд, два — «Андроид» и один — iOS.

Обеспечили постоянное соединение между сервером и приложением

Для этого использовали протокол WebSocket.

Через TCP handshake он устанавливает нужное нам постоянное и двустороннее соединение между сервером и приложением. И позволяет получать сообщения ровно тогда, когда вам их отправили.

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

Разработали подключение к сокетам и реализовали сокет-методы

Искали инструмент для ведения документации по сокет-методам, выбирали между Swagger или Postman. Swagger — хорошая штука для документирования и тестирования API, но в ней нельзя тестировать сокеты. Постман удобен для тестирования и API и сокетов, но документацию вести сложно. Поэтому тестировали в Постмане, а документацию вели в Google Docs.

Пример описания сокет-метода
Пример описания сокет-метода

Разработали решение для пагинации сообщений

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

Всё приложение написано на Kotlin Multiplatform. Но оказалось, что этот фреймворк не поддерживает пагинацию сообщений.

Разработали решение с нуля, причем оно стало мультиплатформенным, то есть работает на «Андроид» и iOS.

Избавили приложение от внеплановых перезапусков

Трудности возникли при работе с системой навигации в Jetpack Compose Configuration. Например, когда пользователь открывал чат из списка контактов или нажимал на пуш, приложение перезагружалось.

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

Отладили пуши

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

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

Постоянно созванивались, чтобы решить все технические трудности — с командой и заказчиком

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

А в итоге сделали продукт, который полностью отвечает ожиданиям клиента.

Разработали новое решение на Kotlin Multiplatform, переписали навигацию в Compose и интегрировали чаты в приложение для нетворкинга

Вот что мы реализовали в рамках проекта

  • Экран чата и списка чатов
  • Статусы online/offline и последняя активность пользователей
  • Статусы прочтения сообщений
  • Отправка ссылок и эмоджи
  • Пуш-уведомления
  • Отображение последнего сообщения на экране списка чатов
  • Динамическое появление нового сообщения
  • Локальное хранение сообщений
  • Удаление диалогов/сообщений

Технический стек

В приложении были использованы следующие технологии:

Фронт

  • Ktor – библиотека, которая реализует сетевой стек (HTTP, WebSocket) для платформ с поддержкой плагинов для расширения функциональности.
  • Kotlin Multiplatform – фреймворк, который позволяет использовать общую кодовую базу для бизнес-логики приложений разных платформ.
  • SwiftUI – фреймворк для создания пользовательского интерфейса на iOS.
  • Jetpack Compose — UI-фреймворк, изначально предназначенный для Android, но позже реализованный и для других платформ.
  • Koin – библиотека для инъекции зависимостей, простая и лаконичная. Отличный выбор для быстрого старта.

Бэк

  • .NET 7
  • Docker
  • RabbitMQ
  • Kubernetes
  • WebSocket
  • Elasticsearch
  • PostgreSQL
  • MongoDB

FIN!

Спасибо всем, кто дочитал до конца. И отдельная благодарность нашему заказчику за терпение. Верим, что проект взлетит, а мы сделаем для него еще немало крутых фич.

Подписывайтесь на наш тг-канал, там мы рассказываем как меняем позиционирование и работаем с топами рынка. А ещё просто делимся буднями и ищем людей в команду.

Разработали новое решение на Kotlin Multiplatform, переписали навигацию в Compose и интегрировали чаты в приложение для нетворкинга
88
1 комментарий

Крутые!!! Теперь выкладывайте свое решение куда-нибудь, чтобы можно было переиспользовать )))

2