Автор - Юрий Мусиенко
Источник - https://merehead.com/ru/blog/messenger-app-development/

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

Шаги создания мессенджера
Разработка мобильного мессенджера — это нетривиальная задача, требующая соответствующего опыта и знаний. Причем не только для реализации технической части, но и для создания уникального ценностного предложения, которое позволит выделить ваш проект среди конкурентов: WhatsApp, Facebook Messenger, Telegram, Skype и других. Как найти технического партнера и на что обращать внимание при его выборе, подробно описано в статье: «Как выбрать компанию-разработчика»

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

1.Подписание договора. Вы и представители компании-разработчика (проект-менеджер, бизнес-аналитик) прорабатываете концепцию мессенджера, после чего составляется техническое задание проекта. Дальше вы обговариваете условия сотрудничества и подписываете договор.
2.Прототипирование интерфейса. Бизнес-аналитик, дизайнер и / или вы создаете каркас интерфейса мессенджера, где показаны пользовательские потоки, экраны и элементы дизайна, а также дано описание функционала.
3.Создание дизайна интерфейса. Дизайнеры на базе готовых каркасов разрабатывают макеты интерфейса — статичное представление дизайна приложения в том виде, в котором он будет представлен пользователям. При необходимости также создаются прототипы — интерактивные макеты, где работают все анимации, иконки, и переходы, но не работают функции.
4.Кодирование приложения. Реализация технического задания, макетов/прототипов и функций мессенджера в программном коде. Этим занимаются фронтенд- и бэкенд-разработчики мобильных приложений.
5.Тестирование приложения. QA-специалисты тестируют код вашего приложения, а также проверяют его производительность, безопасность, функционал и совместимость с большинством iOS- и Android-устройств.
6.Релиз и поддержка. Готовое и протестированное приложение добавляют в App Store (99 долларов в месяц) и Google Play (25 долларов единоразово). Кроме того, также необходимо наладить работу службы поддержки.

Стоимость разработки функций мессенджера
Все современные мессенджеры довольно сильно различаются по дизайну, реализации и успешности. Однако у всех них есть набор общих базовых функций, которые обеспечивают идеальный процесс общения в реальном времени. Если вы хотите создать свой мессенджер, то вам нужно начать именно с них. Вот их краткое описание, время и стоимость реализации при средней разработчика 50 долл/час.
Регистрация, вход. Процесс регистрации в приложениях для обмена сообщениями обычно происходит с помощью номера телефона, электронной почты или аккаунта в Facebook, Apple и Google. При этом приложение часто требует подтверждения через ссылку или SMS. Например, когда в WhatsApp пользователь вводит свои данные (номер телефона), приложение отправляет ему SMS, которое автоматически обрабатывается внутри самого приложения. Что весьма удобно.

https://merehead.com/blog/wp-content/uploads/Messenger-App-Development-Features-and-Costs2.jpg
Варианты реализации способа регистрации в популярных мессенджерах.

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

https://merehead.com/blog/wp-content/uploads/Group-146.png

Настройки мессенджера. В этом разделе пользователи могут отключать или включать уведомления о прочтении сообщений, изменять изображение своего аватара или имя профиля, менять номер телефона, добавлять новые устройства, управлять заблокированными контактами, изменять статус, удалять свои учетные записи, настраивать параметры профиля, например уведомления чата, и т.п. Кроме того, вы также должны предоставить пользователям мессенджера возможность настраивать уровень конфиденциальности их сообщений и данных.
https://merehead.com/blog/wp-content/uploads/Group-147.png

Быстрый импорт контактов. Эта опция позволяет с помощью пары кликов перенести список своих контактов из WhatsApp, Facebook Messenger, Telegram, Skype, Sim-карты или иного источника в ваш мессенджер. Кроме того, сейчас также набирает популярность опция быстрого обмена выбранных контактов через чат, SMS или по беспроводной связи (WiFi, Bluetooth) с находящимися рядом людьми. Последнее можно сделать с помощью QR-кода или специального действия: одновременное встряхивание находящихся рядышком телефонов.

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

https://merehead.com/blog/wp-content/uploads/Group-148.png

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

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

https://merehead.com/blog/wp-content/uploads/Group-149.png

https://merehead.com/blog/wp-content/uploads/Messenger-App-Development-Features-and-Costs7.jpg
Два варианта реализации моментальных сообщений: когда сообщения проходят через сервер (слева) и когда сообщения отправляются от пользователя к пользователю.

Обмен файлами мультимедиа. При разработке собственного мобильного мессенджера нужно предоставить пользователям возможность обмениваться изображениями, а также короткими аудио- и видеофайлами. Реализовать такую опцию можно путем загрузки мультимедийного файла для доставки на HTTP-сервер, после чего пользователю-получателю будет отправлена ссылка на контент вместе с его эскизом в кодировке Base64. Также можно использовать API SOAP и RESTful.
https://merehead.com/blog/wp-content/uploads/Group-150.png
Аудио- и видеозвонки. Несмотря на то, что главная идея мессенджеров — это моментальные текстовые сообщения, большинство их пользователей также хотели бы иметь возможность время от времени общаться с помощью других способов. Эту функцию можно реализовать в вариациях: только аудиозвонки и сообщения, только видеозвонки и сообщения или групповые аудио- и видеозвонки с сообщениями.

С технической точки зрения этот функционал можно воплотить несколькими способами. Например, WhatsApp использует мультимедийную коммуникационную библиотеку с открытым исходным PJSIP для реализации передачи голоса и аудио по IP (VoIP). PJSIP написан на C и использует высокоуровневый API, объединяя протокол сигнализации SIP с мультимедийной структурой и функцией обхода NAT. Данный API подходит для всех типов систем, включая мобильные.
https://merehead.com/blog/wp-content/uploads/Group-151.png
Стикеры, маски, эмодзи. Они добавляют сообщениям эмоций, могут сделать общение более живым или заменить собою целые фразы, но только если у них приятный внешний вид. Если дизайн масок или смайлов не будет вызывать у людей приятных эмоций, то в лучшем случае их не будут использовать, в худшем — откажутся от вашего мессенджера (гораздо более вероятный сценарий).
https://merehead.com/blog/wp-content/uploads/Group-152.png
Определение местоположения. Геолокация может быть интегрирована в мессенджер с помощью Google Maps API для устройств на базе Android или Map Kit для устройств на базе iOS от Apple. Это даст возможность определять регион пользователя, чтобы автоматически устанавливать нужный язык интерфейса. Еще можно позволить пользователям делиться своим местоположением или добыть геофильтры для масок и эмодзи, как в мессенджере Snapchat.
https://merehead.com/blog/wp-content/uploads/153.png
Сквозное шифрование (E2EE). Если вы хотите создать приложение для обмена сообщениями, вы должны обеспечить безопасность личных данных пользователей. В большинстве приложений этого добиваются посредством метода под названием end-to-end encryption (E2EE). Это подразумевает, что сервер не знает секретные ключи абонентов (с их помощью система шифрует и расшифровывает данные) и никак не участвует в шифровании — оно проходит как бы «сквозь» сервер.

В WhatsApp такое шифрование основано на базе протокола Signal, в реализации которого используются алгоритмы ECDH на Curve25519, AES-256, AES-GCM, HMAC-SHA256, HDKF. Сквозное шифрование в WhatsApp распространяется на все типы сообщений: текст, аудио, видео, файлы мультимедиа.
https://merehead.com/blog/wp-content/uploads/Group-154.png
Уведомления. В современных мессенджерах пользователь получает уведомление о личном сообщении чата или групповом сообщении через уведомления мобильного приложения. В зависимости от глубины проработки данной функции это может быть простое push-уведомление и засветка индикатора, уведомление с полным текстом нового сообщения на экране смартфона засветкой индикатора, а также уведомление с текстом нового сообщения на экране и возможностью ответить на него не открывая мессенджер. Эта функция может быть реализована через Google Cloud Messaging или Apple Push Notifications.
https://merehead.com/blog/wp-content/uploads/Group-155.png
Монетизация. Если вы намерены разработать мобильный мессенджер, чтобы заработать на этом, то вам нужно заранее определиться с моделью монетизации. Самый популярный вариант — это сочетание freemium-модели с рекламой.

Freemium подразумевает, что основная часть функционала приложения будет абсолютно бесплатной, поэтому пользователи смогут спокойно отправлять и получать сообщения ничего за это не платя. Но они смогут расширить возможности приложения, купив эксклюзивные стикеры, увеличив качество видеозвонков, расширив количество участников в групповых звонках и т.п.
https://merehead.com/blog/wp-content/uploads/Group-156.png

Факторы, влияющие на стоимость разработки
Сложность проекта. Под сложностью приложения обычно имеют в виду количество реализованных в нем функций и глубину их проработки. Градация здесь следующая: простой мессенджер — до 400 часов, умеренный — от 400 до 800 часов, сложный — от 800 до 1500 часов или больше. Разницу между простым и сложным приложением легко заметить, если сравнить функцию SMS и возможности таких мессенджеров, как Facebook Messenger, Snapchat, WhatsApp, Telegram, Viber или Signal.
https://merehead.com/blog/wp-content/uploads/Messenger-App-Development-Features-and-Costs16.jpg
Какие функции есть в самых популярных мессенджерах.

Технологический стек и API. Это набор различных инструментов разработки, которые используются при создании мобильных приложений, сайтов и другого ПО. Технологический стек принято делить на фронтенд, бэкенд и API.
Фронтенд — это интерфейс и остальные элементы приложения, с которыми напрямую взаимодействует конечный пользователь. Также можно сказать, что это все то, что происходит в устройстве пользователя. Вот пример технологического стека для разработки мобильного мессенджера:
https://merehead.com/blog/wp-content/uploads/Group-157.png

Бэкенд — это программно-аппаратная часть сервиса, которая отвечает за реализацию логики и функционала приложения вне устройства пользователя. Вот пример технологического стека для бэкенда мессенджера:
- Язык программирования — JavaScript, Node.js.
- Документация по API — Swagger.
- Инфраструктура — AWS.
- Фреймворк — Express 4.
- База данных — MySQL.

API (Application Programming Interface) — это набор протоколов для соединения бэкенда и фронтенда и также интеграции с внешними сервисами, расширяющими возможности приложения. Вот пример набора API для разработки мессенджера:
https://merehead.com/blog/wp-content/uploads/Group-158.png

Местоположение разработчика. Это важно, так как средняя зарплата UX/UI-дизайнеров, программистов, бизнес-аналитиков, проект-менеджеров, QA-инженеров и других специалистов может сильно различаться в разных странах. Так, средняя почасовая ставка специалиста из Соединенных Штатов Америки составляет 95 долларов в час, Великобритании и Западной Европы — 67 долларов в час, Восточной Европы — 37 долларов в час, Азии — 25 долларов в час.

Причем, что любопытно, несмотря на столь большую разницу в зарплате, качество работы специалистов из США и, например, Украины, сопоставимо. Поэтому Apple, Microsoft, Dell, IBM и другие американские IT-компании постоянно отдают часть разработки своих продуктов на аутсорсинг в более «дешевые» страны.

Вот ориентировочная стоимость разработки мобильного мессенджера исходя из его вероятной сложности и местонахождения компании-разработчика:
https://merehead.com/blog/wp-content/uploads/Group-159.png

Зарплата разработчиков по должностям
Чтобы вы могли лучше ориентироваться в зарплатах, вот таблица, где представлены почасовые ставки мобильных разработчиков в зависимости от их специализации, местоположения и уровня навыков:
https://merehead.com/blog/wp-content/uploads/Group-160.png