Hermeia

Командный мессенджер, работающий на Android и iOS из одного кода. Серверы, каналы, треды, роли, личные сообщения и группы - полный набор, плавный как Telegram. Распространение вне магазинов, под контролем владельца.

Hermeia
TL;DR

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

Введение

Hermeia - это мессенджер, призванный заменить Discord для команды: серверы с каналами, ветки, роли с правами, личные и групповые сообщения. Мессенджер сам по себе не нов - и именно поэтому он труден.

Люди сравнивают его не с абстрактным идеалом, а с Discord и Telegram, которыми пользуются каждый день и которые у них в пальцах. Если список бесед прокручивается с рывком или вход в канал длится на мгновение дольше, пересадка кончается на первой неделе, прежде чем кто-либо оценит что-то еще.

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

Планку задает Telegram

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

Плавность прокрутки при длинной истории (ориентировочно, fps)

Страница в WebView
34
Нативно, один код
60

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

Один код и дистрибуция без магазина

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

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

Два приложения против одного кода

АспектДва отдельных приложенияОдин код (Hermeia)
Поддержкадвойная работаодна команда, один источник
Риск расхожденияправка теряется на одной платформета же логика на обоих
Модель данныхдважды одно и то жеобщая
Нативная отделкаотдельнонативная там, где видна разница
!
Внимание

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

Полная модель Discord, не урезанное подмножество

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

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

1
Один код на две платформы

Android и iOS из одной базы, общая логика и модель данных, нативная отделка там, где видна разница платформ.

2
Полная модель Discord

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

3
Плавность как требование, а не пожелание

списки сообщений и каналов, спроектированные под постоянно плавную прокрутку, без рывков при длинной истории.

4
Свой механизм обновлений

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

Обновление, которое никто за нас не отправит

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

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

update-manifest.json · json
{
  "latest": "1.8.0",
  "minSupported": "1.6.0",
  "android": "https://dl.hermeia.app/android/1.8.0.apk",
  "ios": "https://dl.hermeia.app/ios/1.8.0.ipa",
  "mandatory": false
}
1
база кода на Android и iOS
60 fps
цель плавности прокрутки списков
2
канала выпуска: опциональный и обязательный

Выигрывает тем, что не отстает

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

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

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

Больше проектов

Другие работы из той же категории - посмотрите, как мы решаем похожие задачи.

Есть похожий проект?

Напишите нам - смета бесплатна и приходит в течение часа.