Разработка
Личный опыт разработки «аналога Whatsapp» за 4 месяца
Сделать свой мессенджер просто? Вовсе нет — даже самое простое приложение для общения это до 50 функций, исполнение которых к тому же зависит от платформы. Технический директор компании Mauris Владимир Бондаренко рассказывает о своем опыте разработки корпоративного мессенджера.
Интересный и нестандартный проект всегда манит разработчиков больше, чем разработка очередного интернет-магазина. Вот и мы, получив возможность реализовать корпоративную сеть с встроенным мессенджером для строительной компании BI Group, кинулись в бой, согласившись на срок полной реализации в 4 месяца.
Это был наш первый опыт разработки мессенджера. Предстояла уйма работы, но задор от возможности реализовать классный проект не давал усомниться в успехе. Уже сейчас, имея опыт больших месседжевых проектов, понимаем, что тогда мы смогли вытянуть нереальный объем работ и залить в сторы приложение только благодаря командной сплоченности и тому фактору, что для работы над данным проектом были отобраны наши лучшие специалисты.
Приложение должно было содержать:
- корпоративные новости;
- локальную базу сотрудников;
- посты и каналы аналогично Facebook;
- мессенджер.
В качестве back-end мобильного приложения использовали Mauris CRM, которая интегрирована с корпоративными порталами холдингов заказчика. Благодаря готовым модулям Mauris CRM и наличия REST API были реализованы все разделы, кроме мессенджера. Не буду останавливаться на реализации всех функций, там проблем не возникло.
Выбираем технологию
Перед выбором технологии для обмена сообщениями в приложении мы изучили теорию. Времени было мало, поэтому тайминг всех этапов был очень жесткий. Уже через сутки мы увидели, что есть два реальных решения для реализации: писать свое или использовать XMPP. Главной задачей была реализация протокола на сокетах вместо HTTP, что позволит реализовать оперативную двухстороннюю связь с сервером.
Свою реализацию логично делать при наличии должного опыта с чемоданом ошибок и успешных решений, протестированных на аудитории. Мы решили остановится на XMPP, проверенном годами решении таких компаний, как Google и Yahoo.
За 3 дня наш будущий специалист по разработке мессенджеров прочитал книгу «XMPP» в оригинале. Через неделю у нас был прототип. Через две недели у нас уже ходили сообщения между тестовыми клиентами. Были реализованы статусы «печатает», «отправлено», «доставлено», «прочитано». Казалось, что половина пути пройдена и осталось добавить групповые чаты, правильно подключить решение к остальному бекенду и доработать клиентскую часть.
Объем работ
На тот момент мы не до конца понимали объемы работ, которые были проделаны программистами в таких мессенджерах как WhatsApp, Viber, Telegram. Из-за сжатых сроков мы не выполнили реверс инжиниринг WhatsApp и только в конце первого месяца поняли, что функционал мессенджера значительно больше, чем кажется на первый взгляд.
Пока не столкнешься с разработкой мессенджера, не заметишь, как много дополнительного функционала обеспечивает необходимый уровень простоты и удобства работы:
- Статусы отправлено, доставлено, прочитано;
- Возможность копировать сообщение;
- Возможность отвечать на конкретное сообщение;
- Функция пересылки сообщений;
- Возможность удалять сообщения у себя или и у себя, и у собеседника;
- Отправка смайлов;
- Локальное хранение диалогов;
- Поиск в диалоге;
- Возможность отключить уведомлений новых сообщений в конкретном диалоге;
- Возможность удаления диалога;
- Отправка изображений с встроенным редактором по типу упрощенного фотошопа с конвертированием их перед отправкой для уменьшения размера файла;
- Отправка и открытие файла;
- Редактирование видео, конвертация, отправка, воспроизведение;
- Отправка контакта из телефонной книги;
- Отправка геопозиции.
И это только базовые функции, которые доступны в бесплатных мессенджерах при общении между двумя людьми.
Мы не упомянули групповые переписки и секретные чаты. При подробном описании возможностей «стандартного простого мессенджера» список будет содержать около 50 пунктов. За каждым из этих пунктов стоит огромная работа команды проекта, и нужно понимать, что на реализацию каждого из пунктов потребуются время и ресурсы.
Для нашей корпоративной сети мы определили точные требования к функционалу мессенджера, и это позволило увидеть, что до финиша еще далеко.
Отличия iOS и Android
Следующим неприятным открытием было различие смайлов на iOS и Android. Apple реализовала стандартную клавиатуру, которой пользовались обладатели яблочных устройств, в то время как у Android не было такой вшитой стандартизированной клавиатуры. В связи с чем, в интерфейсе Android клиента мы реализовали дополнительную кнопку для смайлов, которая открывает клавиатуру приложения, где пользователи выбирают смайл. Для отображения смайла в приложении и push-сообщениях мы выполнили преобразования, прописанные вручную для каждого смайла.
После несовместимости смайлов, несовместимость форматов воспроизведения отправленных видео уже не удивляла. Под каждую платформу необходимо было готовить отдельный формат файла.
Хранение истории и синхронизация клиентов
Два важных вопроса, которые отнимают уйму времени. Они взаимосвязаны, поэтому решались комплексно. В рамках данного проекта было принято решение хранить историю переписок. При авторизации на новом устройстве необходимо подгружать полную историю индивидуальных и групповых чатов. В то же время было принято решение, что для одной учетной записи будет всего 1 клиент, и в случае подключения нового клиента, старый клиент будет уведомлен об этом и отлогинен. Такое решение позволило сохранить много времени.
Уже в первом нашем продукте мы заложили логику, частично превосходящую возможности Viber (не подгружает переписки, имеет ограничение по количеству клиентов). Следующий наш продукт по технологичности превзошел возможности Viber и по количеству клиентов, подключенных к одной учетной записи.
Статусы сообщений в групповых чатах
Приступив к реализации групповых чатов, мы делали упор на возможность подключать большое количество людей в группы. Задача состояла в том, чтобы сделать лимит значительно выше, чем у Whatsapp или Viber. Данный аспект поставил нас перед сложным выбором. Если в группе 500 человек, то по протоколу XMPP служебные уведомления о доставке и прочтении каждого сообщения каждым участником чата необходимо рассылать другим участникам чата. Таким образом получается, что в группе из 500 человек на каждое сообщение участника необходимо отправить 499 сообщений о доставке сообщения и 499 сообщений о его прочтении.
Из-за приоритетности задачи увеличения лимита участников группы, мы отказались от данного служебного трафика и информируем автора сообщения только об успешности отправки сообщения.
Проблемы нестабильности соединения
Полевые испытания показали, что статус «отправлено» тоже требует качественной отладки. В реальном мире нам не всегда доступно высокоскоростное Wi-Fi подключение к интернету. Иногда приходится работать с прерываниями, переключениями между базовыми станциями и другими проблемами связи.
Добавляется еще проблема остановки приложения под iOS. При каждом сворачивании приложения операционная система обрывает соединение с сервером. Пользователь не знает об этом и ему это абсолютно неинтересно. Он разворачивает приложение и хочет моментально увидеть новые сообщения, о которых ему уведомили push-сообщения, или отправить свое сообщение.
Так появляется проблема оптимизации программного решения под устойчивую работу соединения при нестабильном интернете и задача по созданию невероятно быстрого переподключения в случае возникновения проблем.
Хеппи энд
На этом мы остановимся. Мы описали основные крупные проблемы с, которыми столкнулись за те 4 месяца напряженной работы.
У вас возникнет вопрос: выпустили ли мы продукт в срок? Выпустили в день дедлайна:) Весь заявленный функционал был реализован, но следующие два месяца ушли на отладку и оптимизацию работы как серверной стороны, так и iOS, Android клиентов.
После этого проекта последовали следующие аналогичные проекты, но к ним мы уже были готовы. Надеемся, что данная статья подготовит и вас. Если вы интересуетесь тонкостями мобильной разработки, смотрите видео-советы на нашем YouTube-канале:
-
Видео и подкасты для разработчиков1 месяц назад
Lua – идеальный встраиваемый язык
-
Новости1 месяц назад
Poolside, занимающийся ИИ-программированием, привлек $500 млн
-
Новости1 месяц назад
Видео и подкасты о мобильной разработке 2024.40
-
Новости1 месяц назад
Видео и подкасты о мобильной разработке 2024.41