Softorium

Softorium

Софториум — это хард разработка Делаем крутой софт и показываем мир ИТ-компании изнутри!
На Пикабу
100 рейтинг 3 подписчика 0 подписок 9 постов 0 в горячем
1

Редизайн и автоматизация CRM: кейс сервиса аренды фототехники «Техника современной съёмки»

Задача

Компания «Техника современной съёмки» с 2012 года предоставляла в аренду фото‑ и видеотехнику в Москве. Чтобы сохранять позиции лидера на рынке, они обратились к нам с задачей обновить CRM — основную систему управления заказами, клиентами и техникой.

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

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

Решение

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

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

Для прозрачности каждого заказа была реализована функция сохранения истории работы над заказом — от первого обращения клиента до возвращения оборудования. Все действия сохранялись с отметкой времени и ответственных сотрудников. Отдельно был разработан личный кабинет для механиков. Каждый видел только свои задачи и сроки. Это снижало количество сбоев и позволило рациональнее распределять нагрузку между специалистами.

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

Работа с клиентской базой стала еще проще благодаря автоматической системе применения скидок и акций. Алгоритм назначает нужные условия в зависимости от категории товара, цены или срока аренды. Также появились возможности выделять «спящих» клиентов — тех, кто давно не пользовался сервисом, и формировать отчеты о новых клиентах. Эта информация нужна в разработке маркетинговых стратегий.

Для улучшения коммуникаций была интегрирована система распознавания звонков через IP‑телефонию на базе Yandex SpeechKit. Это значит, что все разговоры автоматически преобразовывались в текст с разделением ролей менеджера и клиента. Такой подход помог контролировать качество сервиса и обучать персонал на основе реальных диалогов.

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

Команда проекта

  • Проектный менеджер.

  • Бизнес‑аналитик.

  • Backend‑разработчик.

  • Front-end разработчик.

  • UX/UI дизайнер.

  • Тестировщик.

Заключение

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

Стек технологий

MySQL, JavaScript, jQuery, PHP, Joomla, Yandex SpeechKit

Показать полностью 3
1

Создание сервиса по поиску и выбору отелей и мест для отдыха InnTravel

Задачи

Inntravel.ru — онлайн-платформа для выгодных путешествий по России, созданная для тех, кто хочет отдыхать без переплат и лишней суеты.

Когда заказчик обратился к нам, он был уверен, что проект почти готов. Однако при первом знакомстве стало понятно, что платформа нуждается в серьезной доработке. База данных содержала только «сырые» SQL-запросы, а бэкенд не имел чёткой структуры. Даже локальный запуск проекта для анализа потребовал исправления множества технических проблем. После предварительного аудита мы поняли: чтобы платформа могла полноценно функционировать и масштабироваться, ее нужно перестроить практически с нуля.

Целевая аудитория

  • Путешественники, ищущие выгодные и проверенные варианты отдыха на территории России.

  • Владельцы отелей, гостевых домов и апартаментов.

Решение

Интеграция SQLAlchemy и Alembic

Мы внедрили SQLAlchemy — ORM, которая структурировала всю работу с базой данных. Alembic позволил реализовать миграции базы данных без головной боли.

Все запросы были переписаны под новую архитектуру, а ошибки — устранены.

Платежные системы

Интегрировали СБП и «Альфа-Банк». Теперь пользователи могут выбирать удобный способ оплаты, а транзакции проходят стабильно и безопасно.

Гибкие цены

Разработали адаптивную систему ценообразования на проживание с учетом продолжительности проживания — от одного дня до целого года.

Личный кабинет

Разработали кабинет для владельцев отелей с возможностью редактировать описания, подгружать фотографии и настраивать цены. Для пользователей добавили функции бронирования и продления проживания.

Парсер

Добавили парсер для сбора данных с тематического агрегатора жилья для отдыха Хочу-на-Юга.ру и автоматического создания на их основе карточек отелей на платформе заказчика. Для его работы интегрировали систему фоновых задач на базе Celery.

Frontend и виджеты

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

  • расширенного поиска отелей с фильтрами по регионам, датам, типам жилья;

  • популярных курортов, новинок и отзывов;

  • прогноза погоды по регионам для планирования отдыха;

  • карточек отелей с информацией, фото и возможностью бронирования;

  • для удобной навигации и сортировки при поиске.

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

Команда проекта

  • Проектный менеджер.

  • Backend-разработчик.

  • Frontend-разработчик.

  • DevOps-инженер.

  • QA-инженер.

Заключение

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

Сегодня Inntravel.ru — это живой и полнофункциональный сервис, который гибко адаптируется под растущие и меняющиеся потребности своих пользователей.

Стек технологий

Celery, Python, PostgreSQL, Jinja2, Redis, Flask, SQLAlchemy, Alembic.

Показать полностью 4
1

Доработка и развитие портала юридических услуг

Как мы помогли пользователям находить грамотных юристов, а агрегатору — зарабатывать

О заказчике

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

На момент запуска проекта сайт не поддерживал онлайн-оплату, что сдерживало развитие сервиса. Интерфейс платформы был неудобен для пользователей.

Проблема

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

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

Задачи проекта

Перед командой стояли следующие задачи:

  1. Внедрить безопасный и прозрачный механизм монетизации.

  2. Разработать систему начисления платы за услуги.

  3. Переработать личные кабинеты с учетом роли пользователя.

  4. Запустить рекомендательную систему для повышения релевантности выдачи юристов.

  5. Обновить главную страницу, чтобы упростить понимание условий работы с порталом.

При этом все изменения должны были быть внесены в работающий сервис с минимальным влиянием на текущих пользователей.

Целевая аудитория

Платформа предназначена для:

  • людей, которым нужна быстрая и надёжная юридическая помощь;

  • практикующих юристов;

  • юридических компаний.

Решение

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

При выборе платного формата пользователь проходит трехэтапную форму, где выбирает тип своего вопроса и может увидеть соответствующую ему стоимость:

  • «Лёгкий вопрос» — типовая ситуация, на которую есть четкий и быстрый ответ по законам РФ.

  • «Стандартный вопрос» — юристы уточняют детали, смотрят документы, вникают в суть. Ответ будет подробнее и с анализом.

  • «Приватный / Срочный вопрос» — в рабочие часы (с 11:00 до 21:00 по МСК, без выходных) юристы ответят в течение часа. Такие заявки видят только проверенные и авторизованные специалисты. Всё обрабатывается вручную через админку, чтобы сохранить конфиденциальность и ускорить процесс.

  • «Экспертное мнение» - серьёзный случай? Тогда за него берётся целая команда экспертов. Они изучат документы, обсудят ситуацию и дадут взвешенное решение — с онлайн-взаимодействием в удобное для клиента время.

  • «Назначь сумму сам» — указывается своя цена за ответ. Юристы посмотрят и решат, готовы ли отвечать на вопрос за такую сумму.

На сайт была добавлена возможность приема и вывода денежных средств. В процессе изменили функционал создания заявки на консультацию и внедрили платные функции.

Важной задачей для разработчиков стало создание безопасного и надежного способа обработки платежей.

В агрегаторе заработала рекомендательная система подбора специалистов и юридических компаний: наиболее подходящие кандидаты перемещаются в начало списка.

Личные кабинеты были переработаны с учетом ролей пользователей:

  • клиенты получили понятный интерфейс в виде стандартной пользовательской анкеты;

  • частные юристы и юридические компании — возможность загружать лицензии, управлять ценами и проходить верификацию;

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

Главная страница была обновлена: на ней разместили информацию о том, как работает агрегатор и как рассчитывается стоимость услуг юристов. Существующие информационные блоки были отредактированы.

Команда проекта

  • Проектный менеджер.

  • Backend-разработчик.

  • Frontend-разработчик.

  • QA-инженер.

  • DevOps-инженер.

Заключение

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

Технологический стек

MySQL, JavaScript, jQuery, CSS, Ajax, PHP, HTML, Laravel Framework.

Показать полностью 4
1

Разработка мобильного приложения для чтения и прослушивания книг на казахском языке "Тында"/"Тенда"

Разработка мобильного приложения для чтения и прослушивания книг на казахском языке "Тында"/"Тенда"

Задача

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

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


Решение

На момент начала работ приложение имело ряд проблем. Интерфейс не был адаптирован под различные форматы экранов, из-за чего отображение элементов на планшетах и смартфонах отличалось. Навигация между разделами требовала чрезмерного количества действий, что негативно сказывалось на удержании аудитории. Приложение работало нестабильно, часто возникали ошибки при загрузке контента. Текущая версия React Native устарела, что усложняло поддержку и ограничивало возможности обновления. Кроме того, пользователи не имели возможности персонализировать приложение — сохранять любимых авторов или формировать собственную книжную полку.

Разработка мобильного приложения для чтения и прослушивания книг на казахском языке "Тында"/"Тенда"

Перед нами стояла задача переработать UX и визуальную логику приложения, сделать дизайн адаптивным, оптимизировать архитектуру и обновить фреймворк до актуальной версии React Native. Важно было добавить функционал персонализации, повысить производительность и стабильность, а также обеспечить удобство использования для разных категорий читателей — от школьников до взрослых пользователей, как в Казахстане, так и за его пределами.

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

Работа началась с анализа поведения аудитории и изучения текущих сценариев использования. Мы выяснили, что пользователи чаще всего покидали приложение после нескольких неудачных попыток найти нужный раздел, а средняя продолжительность чтения была ниже ожидаемой. Также в отзывах часто упоминались просьбы о добавлении избранного и ускорении работы. Это подтвердило необходимость фокусировки на упрощении взаимодействия и персонализации контента.

Разработка мобильного приложения для чтения и прослушивания книг на казахском языке "Тында"/"Тенда"

Команда проекта

Проектный менеджер.

React Native-разработчик.

Backend-разработчик.

QA-инженер.

DevOps.


Решение

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

Разработка мобильного приложения для чтения и прослушивания книг на казахском языке "Тында"/"Тенда"

Одним из ключевых этапов стало обновление технологической платформы: приложение было переведено на последнюю версию React Native. Это значительно повысило производительность, упростило поддержку, улучшило работу с современными устройствами и ускорило выпуск обновлений.

После внедрения обновлённого интерфейса и технической оптимизации показатели приложения заметно выросли.

Разработка мобильного приложения для чтения и прослушивания книг на казахском языке "Тында"/"Тенда"

Технологии

PHP, React Native, Yii2.

Бюджет

300000 руб.

Показать полностью 4

Выводим всех на чистую воду и увеличиваем число обращений в 6 раз. Мобильное приложение Экодар

Рассказываем, как с помощью мобильного приложения сделать воду чистой, а клиентов лояльными. А еще про примерку оборудования в интерьере и похудение с помощью волшебной воды (шутка — вода простая, только очень чистая).

С Алексеем Славгородским руководителем отдела интернет-маркетинга группы компаний "Экодар" мы познакомились летом 2021 года. Нужна была помощь в правке багов приложения для пользователей систем очистки воды. Приложение было готово на 90%.

Кто заказчик?

«Экодар» 30 лет помогает людям и производствам делать воду чистой с помощью домашних, офисных и промышленных систем очистки воды. Вы также можете знать их продукты под брендами WiseWater, Ecomaster, ZauberKraft, ZauberROS.

Более двух миллионов человек в России пьют воду, очищенную оборудованием «Экодар». А еще ее пьют сотрудники «Сбера», «Яндекса» и «Газпрома».

«Экодар» в цифрах

  • клиенты — «Яндекс», «Газпром», «Сбер»;

  • 750 штатных сотрудников;

  • 1 200+ дилерских центров во всех регионах России;

  • 44 700 автоматов питьевой воды в офисах и на предприятиях;

  • более 2 миллионов довольных пользователей пурифайеров;

  • 2 600 м2 офисного пространства и 6 780 м2 производственных и складских площадей.

Собственные складские и производственные мощности в Москве

Собственные складские и производственные мощности в Москве

Тестовая задача

Итак, нам предстояло доработать почти готовое приложение.

Анамнез пациента:

  • Кроссплатформенное мобильное приложение.

  • Язык разработки клиентской части React Native, Expo.

  • Бэкенд разработчик (РНР) и тестировщик на стороне заказчика.

  • Готовность 90%.

Для начала мы сделали несколько небольших задач по короткому тех заданию.

И получили отзыв:

Подход к работе грамотный, ТЗ выполнено в срок. Будем работать дальше.

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

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

Зачем тратить большие деньги на разработку мобильного приложения

«Экодар» — лидер на российском рынке водоочистки, работает более 30 лет. У компании огромная клиентская база.

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

Проблемы первой версии

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

Клиентская часть приложения была выполнена на базе устаревшего SDK Expo, там использовался JavaScript, в то время как современные версии используют Typo Script. Были утечки памяти.

В этих условиях добавление новых функций занимало слишком много времени и все равно приводило к периодическим ошибкам.

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

Медленно, но верно и ненапряжно для бюджета

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

В феврале 2023 года мы начали делать новый каркас системы. А в сентябре 2023-го вторая версия приложения была выложена в сторы.

Версия 2.0 содержала следующие функции:

  • Каталог товаров

  • Трекер воды

  • Карта анализов воды

  • 3D и дополненная реальность для товаров

  • Подробная информацию о системах

  • Напоминание о необходимости сменить расходники

  • Возможность вызвать мастера гражданами и организациями

  • Информация об акциях

Оценка приложения в Google Play 4,8. В AppStore 4,6.

Главной фишкой нового приложения стал трекер воды

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

Кому надо считать воду? Это важно при диетах — при недостатке воды обменные процессы замедляются и сложно похудеть. Контроль воды так же нужен при заболеваниях, связанных с нарушением работы почек, при диабете, беременности, занятиях спортом.

Трекер определит норму чистой воды на основании трех простых параметров:

  • Вес

  • Погода

  • Спортивная активность

В приложении можно сформировать отчет о режиме питья, об изменении веса, настроить уведомления о необходимости выпить воду.

Карта анализа воды и заказ анализа воды

Через приложение можно заказать анализ воды.

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

Виртуальная примерочная

Можно примерить как выбранное оборудование будет смотреться в интерьере

Как новое приложение изменило жизнь пользователей

"Экодар" теперь присутствует на всех доступных в России мобильных платформах — Apple Store, Google Play, Huawei AppGallery, RuMarket, RuStore и имеет нескольких тысяч активных пользователей.

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

Еще одной функцией, доступной только в мобильном приложении «Экодар», стал трекер потребления чистой воды.

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

Как приложение изменило жизнь компании

  • Клиенты и компания стали ближе. Теперь легко связаться с операторами через приложение или вызвать мастера.

  • Выросли имиджевые показатели брендов, под которыми "Экодар" выпускает оборудование.

  • Появился крутой канал для повторных продаж.

  • Сократились расходы на кол-центр.

Так мы поучаствовали в борьбе за чистую воду. Пишите, что думаете про наш кейс. Делитесь, используете ли фильтры воды дома и на работе?

Показать полностью 11

Как мы пытались сэкономить бизнесу деньги и чуть не сошли с ума. Кейс еще одной федеральной аптечной сети

Рассказываем, как мы переносили модуль корзины с приложения, написанного на SwiftUI, в приложение на UIKit. Объясняем, почему у нас ничего не вышло, и зачем вам уходить с UIKit, если вы планируете расширять приложение в ближайшее время.

Команда с хард-подходом в разработке

Привет! Это Софториум, команда разработчиков из Сибири. Уже 3 года мы делаем сложную разработку, чтобы упрощать компаниям жизнь. В нашем послужном списке работа с Sokolov, R-Keeper, IIko и несколькими аптечными сетями.

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

Нам доверили доработку самой проблемной части приложения

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

Бэкенд и Андроид разработчики взяли на себя, а нас позвали на доработки iOS, в числе которых была переделка корзины.

Из-за неудобной корзины аптечная сеть теряла клиентов

Баги в корзине появлялись периодически. А значит, их замечали пользователи и, конечно, не были от этого в восторге.

Вот что о корзине говорили пользователи. Из-за ее нефункциональности сеть теряла клиентов и опускалась в рейтингах.

Вот что о корзине говорили пользователи. Из-за ее нефункциональности сеть теряла клиентов и опускалась в рейтингах.

Но баги — еще полбеды. В корзине не отображались статусы товаров и не было понятно, есть ли лекарство в наличии или доступно только под заказ. Нередко случалось следующее: пользователь оплачивал товар, ему приходила отбивка о выполненном заказе, а уже в аптечном пункте он узнавал, что нужного ему лекарства нет. Ноль удобства + потраченные нервы.

Вернется ли клиент в аптеку после такого?

Нам предстояло добавить статусы товаров — так клиент сразу увидит, какие товары есть в нужной ему аптеке, какие лекарства доступны под заказ, а каких и вовсе нет в продаже.

Решение №1: копипаст

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

План был такой:

  1. Взять корзину другой сети, благо в ней есть весь нужный клиенту функционал и идентичный нашему заказчику API;

  2. скопировать основную часть кода;

  3. подредактировать.

Profit!

Единственная загвоздка здесь в том, что исходное приложение было написано на более новом и прогрессивном фреймфорке SwiftUI, а то, куда переносим решение, — на UIKit. Была вероятность, что из-за сложной совместимости этих двух фреймворков у нас могут возникнуть проблемы. Но кто не рискует, тот не делает мобильные приложения.

Про то, как наша гипотеза провалилась, а разработчик чуть не выгорел

Сперва Кирилл перетащил всю логику корзины и… ничего не получилось. Корзина просто не появилась в приложении — так гипотеза с копипастом не сработала.

Потом Кирилл решил, что нужно вручную прописать весь код корзины на Swift UI, встроив его в UI Kit код имеющегося приложения. И вот представьте: он сверстал все экраны, загрузил в них все данные, потратил на каждый из них кучу времени. А потом обнаружил, что эти самые данные не передаются с экрана на экран!

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

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

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

Мы посмотрели на Кирилла, посмотрели на приложение и сделали вывод: оно слишком монолитно — просто так его не расширить. Требовались новые решения.

Решение №2: допилить то, что есть

Чтобы Кирилл не выгорел основательно, мы аккуратно перевели его на другой проект, а заниматься корзиной поставили Сашу. Решили, что в этот раз разработчик даже не будет смотреть на референс, как и не будет пытаться переписать приложение полностью. Он просто продолжит писать на UIKit — используя те подходы, которые там уже были.

Вот что увидел Саша, когда пришел на этот проект:

  • корзина не работает;

  • связи корзины с остальными модулями нарушены;

  • ошибки приходят из разных частей приложения.

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

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

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

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

Все дело в связях

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

Если мы меняем что-то в корзине, то что-то придется поменять и в другом месте. Если переделываем корзину полностью, то, скорее всего, понадобится переписать все приложение. И все время фиксить связи корзины с другими модулями!

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

Вернулись на UIKit и решили действовать в прежних рамках

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

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

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

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

Пока приложение не будет полностью переписано

Сперва заказчик планировал расширять уже существующее приложение, написанное на UIKit. Коллеги думали, что сначала обновят корзину, потом добавят сервис для личного учета приема лекарств, а потом внедрят еще кучу фич. Но проблема с корзиной показала, что это будет долго, дорого и сложно — поэтому разработчики решили переписать приложение.

Так как серверная часть обоих приложений одинакова, было решено делать для них общую кодовую базу. А к ней уже прикручивать верстку, уникальный дизайн и функционал.

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

Так не придется дважды писать один и тот же функционал под разные приложения и мучаться с совместимостью фреймворков.

Исправили баги, смержили ветки

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

Ветки — это копии проекта, в которые можно вносить любые изменения и которые не влияют на основной проект.

Из-за того, что код писали шесть месяцев назад, объединить ветки (читай — разом внести все финальные изменения в проект) без конфликтов не выходило.

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

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

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

Корзина готова!

Доделать корзину мы смогли — релиз состоялся 27 мая. Такой выдох и облегчение!

Наши страдания с корзиной убедили заказчика менять приложение: все же оно железобетонное, негибкое, написанное по старой технологии. Чтобы без лишних проблем его расширять, нужно перейти на SwiftUI, чем мы сейчас как раз занимаемся.

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

Подписывайтесь на наш канал. Сейчас мы идем в новое позиционирование: делаем ребрендинг, контент-маркетинг и пишем обо всей внутрянке, с которой сталкивается IT-компания.

Ну и конечно ждем ваши комментарии по кейсу. Пишите, что думаете про наш случай. И рассказывайте, как совмещали UIKit и SwiftUI на своих проектах.

Показать полностью 10
0

Исправили баги и увеличили аудиторию приложения с 50 тыс. до 110 тыс. Кейс федеральной аптечной сети

Рассказываем, как дорабатывали приложение аптеки до удобного супераппа на iOS. Подтянули UI/UX, убрали баги и сделали так, чтобы у юзеров был повод проводить в приложении больше времени. Теперь 110 тыс. пользователей iOS не будут нервничать при очередном краше приложения, а аптечная сеть не потеряет в деньгах.

Суровые сибирские разрабы

Привет! Это Софториум, команда с хардовым подходом в разработке. Уже 3 года мы делаем сложную разработку, чтобы упрощать компаниям жизнь.

В нашем послужном списке работа с Sokolov, R-Keeper, IIko и крупной аптечной сетью с более, чем 1000 аптек.

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

Что за аптеки такие

В Москве и Питере эту аптечную сеть знают все, хотя сегодня сеть захватила уже 80 городов страны. Более 1000 аптек сети работают напрямую с производителями и дистрибьюторами фармы, поэтому цены у них самые приятные.

Со временем сеть «доросла» и до своего приложения, которое уже очень скоро скачали порядка 50 тыс. пользователей. Работали в связке с компанией-разработчиком. С их помощью сеть появилась в AppStore и GooglePlay, став одним из самых скачиваемых аптечных приложений в России.

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

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

Из-за багов аптечная сеть могла терять кучу денег

Сеть — огромная, УТП — крутое. В приложении много классных задумок: в нем, например, можно забронировать лекарство по низкой цене и уже через 30 минут получить его в ближайшей аптеке без очереди. И все бы ок, если бы не баги: периодически пользователи жаловались на вылет приложения в момент оплаты заказа.

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

По нашему опыту, юзеры за 3-5 секунд решают, оставаться им в приложении или нет. И если оно не работает, то они не будут тратить время на переустановку, обращение в техпод и ожидание — они просто сделают заказ в другом месте.

Пришли за исправлением багов, а решили внедрить в приложение еще парочку улучшений

Фронт работ предполагался большой: порядка сотни серьезных багов требовали устранения. Разработчики платформы продолжили работы на бэкенде и Android, а мы занялись iOS .

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

Разработчики сами провели бенчмаркинг, проанализировали конкурентов и на основе полученных выводов составили большущий док с планируемыми изменениями. Туда, в числе прочего, входила и разработка аптечки — личного учета медикаментов и трекера самочувствия. Нам оставалось все это грамотно реализовать.

Расписали план работ и погнали кодить

Еще на старте команда разработчиков проанализировала сообщения от техпода и составила стату самых популярных у пользователей багов. Их устранением нужно было заняться в первую очередь.

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

В приложение сети аптек нужно было добавить больше возможностей, чтобы:

  • Юзеры дольше находились в приложении и число их касаний с сетью увеличивалось.

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

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

1. Бесконечные требования обновиться

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

Так происходило из-за неправильного сравнения номеров версий сборок: из-за сложной математики в коде версия на сервере не совпадала с заявленной в Appstore.

При открытии приложения в нем происходят дефолтные бэкграунд-операции. Приложение смотрит: вы или не вы заходите, из привычной ли геолокации, правильный ли вводите телефон. Вдруг вход от вашего имени выполняется из Пакистана? Тогда вас не пустят. Еще сервер должен убедиться, соответствует ли приложение последним гайдлайнам вашей iOS и установленной на вашем устройстве версии. И если не соответствует, то вам предложат обновиться.

Допустим, в Appstore была заявлена версия 1.1.2, но на сервере эти цифры ошибочно складывались между собой — вместо того, чтобы выдаваться такими, какие они есть. Сервер предлагал четвертую версию (1+1+2=4), а не 1.1.2 — учитывая то, что четверки вовсе не существует. И требовал невозможного — обновиться до нее!

Теперь приложение не просто запрашивает сервер, мол, дай мне такой-то билд. А сравнивает цифры установленной сборки — соответствуют ли они конкретной строчке в коде бэкенда. И если они одинаковы (а мы сделали так, чтобы они были одинаковыми), то приложение пускает юзера дальше.

2. Парализация приложения при переходе на главный экран после оформления заказа

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

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

Логи — система приложения, которая записывает данные о крашах. Но в этом случае и краша как такового не происходило: юзер доходил до определенного этапа, не мог перейти из раздела в раздел и в итоге выходил из приложения. Сам! То есть, с точки зрения кода приложение не вылетало — это юзер делал выбор выйти из него.

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

3. Вместо карточек товаров — белые поля

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

Первая наша гипотеза заключалась в том, что при поиске товара ответ по запросу сервера доходил до 20 секунд — это все-таки долго. Думали, что из-за этой задержки карточки и не отображаются. Сообщили штатному бэкендеру приложения и решили проверить, есть ли подобное на Андроиде. На Андроиде было все то же самое, но карточки при этом грузились нормально.

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

Когда устанавливаешь приложение, оно должно весить, скажем, 1 Мб. Но вместо этого скачиваются только 500 Кб — ровно половина того, что должно загрузиться. Логика приложения рассчитана на то, что недоскачанные данные все равно у вас есть, поэтому данные будут подтягиваться из памяти устройства. Но не будут отображаться.

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

4. Баг с неправильной датой доставки

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

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

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

5. Падение приложения при оформлении карты лояльности

Не очень здорово, когда приложение крашится на основном функционале. Особенно, когда юзер уже ввел все свои данные и нажал кнопку «Подтвердить». Будет ли он пытаться это сделать снова? Вряд ли. Он пойдет путем наименьшего сопротивления и закажет что-то у конкурентов.

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

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

Основные баги разобрали, теперь переходим к фичам.

1. Добавили фильтры

Раньше их не было вообще. У человека была строка поиска, а там уж он сам сравнивал дешевые товары с дорогими и выяснял, есть ли лекарство в ближайшей к нему аптеке.

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

2. Сделали поп-ап с предложением перейти в приложение

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

Статистика от заказчика: число пользователей, установивших приложение с мобильной версии сайта — 51%, и это при нормальном показателе в 4%!

3. Сделали окно с выбором темы обращения в блоке «Обратная связь»

Как было раньше: темы сообщений были вбиты в самом коде так, что их порядок и содержание без программиста не поменять. Грубо говоря, они представляли из себя обычный текст, не поддающийся изменению усилиями простого смертного — такое бывает, когда элементы написаны только на фронте. А вот чтобы ими можно было управлять, добавлять в базу, менять их расположение и суть, их нужно было связать с бэкендом.

Бэкенд здесь — центр управления полетом. Если написать элемент только на фронте, то менеджеру нужно будет менять элемент через код, заново собирать билд и паблишить его в AppStore. Если же бэкенд (серверная часть) и фронтент (клиентская часть) связаны, то менеджеру будет достаточно просто зайти в админку и внести туда необходимые изменения. Они подтянутся на бэкенд, бэкенд отдаст это фронтенду, и в приложении все обновится без сложных манипуляций.

4. Улучшили механизм сторис

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

5. Показали товары в видео

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

6. Сделали так, чтобы лекарство можно было получить по QR-коду

Теперь любой заказ можно получить по QR-коду — как на самых популярных маркетплейсах. А из соображений безопасности он будет обновляться раз в сутки.

7. Добавили стикеры с акциями в карточки товаров

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

8. Разработали сервис личного учета медикаментов и самочувствия

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

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

В учетном сервисе удобно контролировать прием лекарств и дозировки, отслеживать график и симптоматику. Приложение напомнит, когда нужно выпить лекарство пользователю и/или его членам семьи. Если же в блистере останется мало таблеток, то приложение напомнит и об этом. И тут же предложит заказать лекарство в два клика по самой доступной цене. Суперудобно!

Легаси проект — это ящик Пандоры

Багов здесь может быть довольно много: пока не погрузишься в код досконально — не узнаешь. На этом проекте мы с разработчиками насчитали свыше 80 ошибок, а в кейсе описали самую малую их часть. В общем и целом доработка приложения заняла у нас почти год, но вот наши результаты:

  • Помогли партнерам сделать удобный супер-апп для 110 000+ пользователей;

  • 40 000+ новых пользователей после устранения багов;

  • 43% всех юзеров сделали заказ в приложении после апдейта;

  • Количество crash-free сессий приблизилось к 100%;

  • CR установок — 51% при нормальном показателе в 4%.

…в общем, год работы того стоил.

Кстати, вот графики с нашими результатами, ниже объясним, что они означают.

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

Процент crash-free сессий увеличился с июля прошлого года. Почти 100% сессий проходят ровно, а приложение не вылетает.

Вот такой кейс у нас получился. Жмем руки всем, кто дочитал до конца, а заказчика благодарим за доверие такой крутой и ответственной задачи!

Ну и подписывайтесь на наш канал. Сейчас мы идем в новое позиционирование: делаем ребрендинг, контент-маркетинг и пишем обо всей внутрянке, с которой сталкивается IT-компания.

Ниже ждем ваши комментарии по кейсу. Пишите, что думаете!

Показать полностью 19
0

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

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

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

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

О проекте

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Экран чата и списка чатов

  • Статусы online/offline и последняя активность пользователей

  • Статусы прочтения сообщений

  • Отправка ссылок и эмоджи

  • Пуш-уведомления

  • Отображение последнего сообщения на экране списка чатов

  • Динамическое появление нового сообщения

  • Локальное хранение сообщений

  • Удаление диалогов/сообщений

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

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

Фронт

  • Ktor – библиотека, которая реализует сетевой стек (HTTP, WebSocket) для платформ с поддержкой плагинов для расширения функциональности.

  • Kotlin Multiplatform – фреймворк, который позволяет использовать общую кодовую базу для бизнес-логики приложений разных платформ.

  • SwiftUI – фреймворк для создания пользовательского интерфейса на iOS.

  • Jetpack Compose — UI-фреймворк, изначально предназначенный для Android, но позже реализованный и для других платформ.

  • Koin – библиотека для инъекции зависимостей, простая и лаконичная. Отличный выбор для быстрого старта.

Бэк

  • .NET 7

  • Docker

  • RabbitMQ

  • Kubernetes

  • WebSocket

  • Elasticsearch

  • PostgreSQL

  • MongoDB

FIN!

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

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

Показать полностью 5
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества