Hermeia
Командный мессенджер, работающий на Android и iOS из одного кода. Серверы, каналы, треды, роли, личные сообщения и группы - полный набор, плавный как Telegram. Распространение вне магазинов, под контролем владельца.
Hermeia - это мессенджер, призванный заменить Discord для команды: серверы, каналы, ветки, роли, личные сообщения и группы. На телефоне он должен быть таким же плавным, как конкуренты, иначе никто не пересядет. Android и iOS из одного кода, а дистрибуция вне магазинов - поэтому нам пришлось построить и свой механизм обновлений.
Введение
Hermeia - это мессенджер, призванный заменить Discord для команды: серверы с каналами, ветки, роли с правами, личные и групповые сообщения. Мессенджер сам по себе не нов - и именно поэтому он труден.
Люди сравнивают его не с абстрактным идеалом, а с Discord и Telegram, которыми пользуются каждый день и которые у них в пальцах. Если список бесед прокручивается с рывком или вход в канал длится на мгновение дольше, пересадка кончается на первой неделе, прежде чем кто-либо оценит что-то еще.
Приложение для Android и iOS создается из одного кода, чтобы одна команда поддерживала один источник правды, а не два расходящихся приложения. А поскольку Hermeia расходится вне магазинов, ко всему этому добавилась еще одна задача: свой механизм обновлений.
Планку задает Telegram
Первая из двух трудных проблем - плавность. Здесь нет скидки: пользователь, который каждый день прокручивает тысячи сообщений в Telegram, почувствует любой рывок за долю секунды. Список сообщений должен прокручиваться чисто при длинной истории, а переходы между экранами быть мгновенными.
Плавность прокрутки при длинной истории (ориентировочно, fps)
Это не косметика, которую "неплохо бы иметь". Для мессенджера плавность - базовая функция, столь же важная, как то, что сообщение вообще доходит. Приложение, которое дергается, воспринимается как сломанное, даже если все остальное делает хорошо.
Один код и дистрибуция без магазина
Вторая проблема - дистрибуция. Hermeia расходится вне официальных магазинов, поэтому у нас нет удобного канала обновлений, который магазин дает бесплатно. Раз никто не отправит пользователю новую версию за нас, мы должны сделать это сами - и так, чтобы обновление не было болезненным.
К этому добавляется решение об одном коде на обе платформы. Поддерживать два отдельных приложения на Android и iOS - двойная работа и двойное место для расхождения: правка на одной платформе, которая так и не доехала до другой. Одна база кода с общей логикой и моделью данных снимает этот груз, а нативная отделка остается там, где разница платформ действительно видна.
Два приложения против одного кода
| Аспект | Два отдельных приложения | Один код (Hermeia) |
|---|---|---|
| Поддержка | двойная работа | одна команда, один источник |
| Риск расхождения | правка теряется на одной платформе | та же логика на обоих |
| Модель данных | дважды одно и то же | общая |
| Нативная отделка | отдельно | нативная там, где видна разница |
Дистрибуция вне магазинов - сознательный выбор с ценой: нет автоматических обновлений из магазина, так что старая версия может надолго остаться на телефоне у кого-то. Поэтому проверка версии и ясное сообщение об обновлении - не дополнение, а часть того, как работает приложение.
Полная модель Discord, не урезанное подмножество
Легко было бы выпустить мессенджер с половиной функций и дописать остальное "потом". Но команда, которая должна пересесть с Discord, сравнивает один к одному: если нет веток или ролей с правами, она сразу это видит и возвращается к старому инструменту. Поэтому с самого начала мы воспроизвели полную модель, которую команда действительно использует.
Серверы с каналами, ветки, роли и права, личные и групповые сообщения - это не выбранный фрагмент Discord, а весь скелет, на котором держится ежедневное общение. Без него "замена" - замена только по названию.
Android и iOS из одной базы, общая логика и модель данных, нативная отделка там, где видна разница платформ.
серверы, каналы, ветки, роли с правами, личные сообщения и группы; не урезанное подмножество, а то, что команда действительно использует.
списки сообщений и каналов, спроектированные под постоянно плавную прокрутку, без рывков при длинной истории.
раз дистрибуция идет вне магазинов, приложение само проверяет, есть ли более новая версия, и ведет пользователя через обновление.
Обновление, которое никто за нас не отправит
При старте клиент сравнивает свою версию с тем, что объявляет сервер, и знает, обновление опциональное или обязательное. Манифест имеет простую форму: самая новая версия, самая низкая еще поддерживаемая, адреса пакетов и флаг, обязательно ли обновление.
Различение опционального и обязательного здесь ключевое. Мелкая правка может подождать, пока пользователь сам решит. Но изменение, которое ломает совместимость со старым протоколом, должно быть принудительным - иначе часть команды застрянет на версии, которая перестала договариваться с остальными.
Выигрывает тем, что не отстает
Hermeia выигрывает не новой идеей мессенджера - выигрывает тем, что на телефоне не отстает от того, что люди знают, и остается под контролем владельца вместо зависимости от магазина. Это тихий род качества: он не бросается в глаза, пока работает, и бросился бы сразу, если бы не работал.
Плавность и собственный путь обновлений - две вещи, которые легче всего отложить "на потом", а потом они болезненно напоминают о себе при первом серьезном изменении. Мы сделали их с самого начала, потому что в мессенджере это не дополнения - это фундамент, на котором стоит все остальное.
Никто не пересаживается на мессенджер из-за красивого меню. Пересаживаются, когда за неделю ни разу не подумают о том, что пользуются чем-то новым.
Больше проектов
Другие работы из той же категории - посмотрите, как мы решаем похожие задачи.
Есть похожий проект?
Напишите нам - смета бесплатна и приходит в течение часа.


