Important
Во время тестирования MAXWin один из тестовых профилей MAX был перманентно заблокирован. Точная причина неизвестна, но проект напрямую работает с API MAX и не является официальным клиентом, поэтому риск блокировки реальный.
Не используйте основной аккаунт. Не используйте номер, который жалко потерять. MAXWin сейчас стоит воспринимать как экспериментальный proof-of-concept / вайбкодный клиент для Windows Phone, а не как безопасную замену официальному приложению.
MAXWin — неофициальный экспериментальный клиент MAX для Windows 10 Mobile / Windows Phone.
Весь проект — это сущий вайбкод, собранный из любопытства и желания проверить, насколько далеко можно протащить современный мессенджер на Lumia и старый UWP-стек. Никаких претензий на промышленное качество, стабильность или красивую архитектуру тут пока нет.
Изначально это был прототип уровня “а можно ли вообще?”, но технически он уже доказал главное: MAX действительно может отвечать старому UWP-приложению. Так что в будущем проект вполне может вылиться в нормальный такой клиент — уже без рофла, с человеческим UI и базовой пригодностью для реального использования.
MAXWin — UWP-приложение на C# + XAML, ориентированное на Windows 10 Mobile.
Цель проекта — сделать минимально рабочий клиент MAX для устройств, которые официально уже давно никому не нужны, но всё ещё живы в сердцах энтузиастов.
Проект вдохновлён и частично ориентируется на открытый клиент Komet:
https://github.com/KometTeam/Komet
Komet используется как референс по протоколу и поведению клиента.
Всё ещё ранний прототип, но уже не просто “а оно вообще отвечает?”. Сейчас это маленький, местами кривой, но уже живой клиент.
Уже работает:
- подключение к серверам MAX;
- первичный handshake;
- запрос кода авторизации по телефону;
- подтверждение кода;
- регистрация нового профиля;
- логин;
- сохранение session token и автоматический вход после перезапуска;
- reconnect после обрыва соединения сервером;
- получение профиля, списка чатов и базовой конфигурации;
- отдельные вкладки для чатов, текущего диалога, аккаунта и логов;
- список чатов с названиями, превью последних сообщений, временем, бейджами и аватарками из MAX;
- кеш списка чатов, имён, аватарок и последних сообщений, включая файловый кеш сообщений;
- открытие диалога и загрузка истории;
- нормальный порядок истории: старые сообщения сверху, свежие снизу;
- разделение сообщений: свои справа, чужие слева, с датами и статусами;
- отправка обычных текстовых сообщений;
- нативное редактирование своих сообщений;
- нативные ответы и пересылка через MAX
message.link, с отдельным preview-блоком как в нормальном мессенджере; - реакции на сообщения и посты каналов: загрузка счётчиков через MAX, плашки реакций, быстрый тап по существующей реакции и замена/снятие своей реакции;
- контекстное меню сообщений: копирование, редактирование, ответ, пересылка, выбор реакции и загрузка медиа;
- базовое отображение медиа-вложений: фото/видео/файлы показываются понятными блоками, фото можно лениво догружать;
- отправка одного фото через
PHOTO_UPLOAD,UPLOAD_ATTACH_PREPи обычныйmsgSend; - кнопка
Startдля ботов, которая отправляет/start; - скрытие поля ввода там, где писать нельзя;
- поиск публичных чатов, каналов, пользователей и ботов;
- старт диалога с ботом через найденный contact/bot flow;
- подтверждение входа в MAX Web по QR/login-ссылке;
- вход в сам MAXWin по QR-коду через web-socket flow, если SMS/код временно недоступны;
- распознавание QR из картинки;
- сканирование QR через камеру, если устройство и разрешения позволяют;
- базовые toast-уведомления о новых сообщениях, пока приложение держит живое соединение;
- копируемый debug-лог с маскированием чувствительных полей.
До полноценного клиента ещё далеко: медиа пока поддерживаются только частично, настоящие системные push-уведомления ещё не прикручены, адресная книга и настройки тоже требуют нормальной работы. Но базовый сценарий “запустил, вошёл, открыл чат, прочитал, написал, ответил, переслал, поставил реакцию” уже начал проступать.
Проект рассчитан на старый стек:
- Visual Studio 2017;
- UWP;
- C#;
- XAML;
- Windows 10 Mobile;
- Lumia 550 и похожие устройства.
Это не WinUI 3, не MAUI, не WPF и не Windows App SDK.
Минимальная практическая цель сейчас — Windows 10 Mobile 1511 / build 10586 и ARM32-устройства уровня Lumia 550. В .csproj выставлен TargetPlatformMinVersion=10.0.10586.0; собранный пакет тоже получает MinVersion=10.0.10586.0.
Текущий MAXWin туда не запустится. Это UWP-приложение, а Windows Phone 8 и 8.1 живут в другом мире: другой проект, другой XAML, другие API для сети, файлов, камеры, уведомлений и жизненного цикла приложения.
Теоретически можно сделать отдельный клиент под Windows Phone 8.1 — скорее всего, отдельным проектом вроде MAXWin.Phone81. Часть протокольного ядра можно было бы вынести и переиспользовать: пакеты MAX, MsgPack, LZ4 и часть клиентской логики. Но UI, хранение, сокеты/TLS, QR, камера и уведомления пришлось бы адаптировать отдельно. Первый реальный тест для такого порта — сможет ли WP8.1 вообще открыть TLS-соединение к api.oneme.ru:443 и пройти handshake.
С Windows Phone 8.0 всё ещё печальнее: старее TLS-стек, меньше подходящих API и больше ограничений. Поддержка WP8.0 сейчас не планируется.
Открытый клиент Komet написан на Dart/Flutter, но Flutter не поддерживает Windows Phone / Windows 10 Mobile / ARM32 как нормальную целевую платформу.
Поэтому MAXWin — это не порт UI из Komet, а отдельная UWP-реализация клиента с переносом нужной логики.
Если проект продолжать, ближайшая задача — не столько навешивать новые фичи, сколько сделать клиент тише и аккуратнее:
- довести UI чатов до более человеческого состояния;
- сделать нормальную карточку профиля/аккаунта;
- уменьшить количество лишних запросов к API;
- сделать reconnect менее агрессивным;
- отделить debug/экспериментальные кнопки от обычного пользовательского сценария;
- не дёргать рискованные protocol-probe без явного действия пользователя;
- довести реакции до совсем нативного вида, включая определение своей реакции после перезапуска;
- расширить медиа и вложения: видео, файлы, альбомы, нормальный просмотр и более надёжная загрузка на Lumia;
- прикрутить настоящие фоновые push-уведомления, если старый UWP-стек и серверный протокол дадут это сделать;
- лучше обрабатывать push-события и разные типы обновлений истории;
- научиться открывать больше типов ссылок MAX;
- убрать лишнюю протокольную болтовню из интерфейса, оставив её в логе;
- допилить авторизацию и QR-сценарии, насколько это позволит сервер.
Звонки, стикеры, полноценная работа с медиа и прочая хрень — когда-нибудь потом. Сначала бы сделать так, чтобы Lumia уверенно притворялась современным мессенджером хотя бы в текстовом режиме.
Ожидаемое окружение:
- Windows;
- Visual Studio 2017;
- UWP workload;
- Windows 10 SDK;
- Windows 10 Mobile устройство или локальный запуск на ПК.
Открывать нужно solution:
MAXWin.sln
Для запуска на ПК:
x64 / Local Machine
Для запуска на Lumia:
ARM / Device
На телефоне должен быть включён режим разработчика.
Если уже есть сохранённая сессия, приложение само подключается, делает handshake и логинится. В нормальном случае после запуска можно сразу идти во вкладку Chats.
Первичный debug-flow всё ещё оставлен на месте:
ConnectHandshake- Ввести номер телефона
Request code- Ввести код
Verify code- Если пришёл
REGISTER— заполнить имя и нажатьComplete registration - Если пришёл
LOGIN— нажатьLogin
После успешного логина сервер возвращает профиль, список чатов и конфигурацию. Новый session token сохраняется отдельно от одноразового login token, так что каждый раз проходить кнопочный ритуал уже не нужно.
Дальше можно:
- выбрать чат в списке;
- прочитать историю;
- отправить текст;
- отправить одно фото кнопкой
Photo; - открыть контекстное меню сообщения правым кликом или долгим нажатием;
- отредактировать своё сообщение;
- ответить на сообщение или переслать его в другой чат;
- поставить реакцию через контекстное меню или нажать на уже существующую плашку реакции;
- нажать
Load mediaу сообщения с медиа, если вложение не загрузилось сразу; - найти публичный чат, канал, пользователя или бота;
- для бота нажать
Start, если диалог уже открыт; - подтвердить вход в MAX Web через QR/login link, картинку с QR или камеру;
- сгенерировать QR для входа в MAXWin на этом устройстве, если вход по SMS временно недоступен.
Проект сейчас активно логирует ответы сервера для отладки. Это удобно, но опасно.
В логах могут быть:
- номер телефона;
- auth token;
- login token;
- session token;
- invite-ссылки;
- данные профиля;
- данные чатов.
Не коммитьте логи. Не выкладывайте токены. Не пушьте .pfx, AppPackages, bin, obj, .vs и прочий локальный мусор.
Для экспериментов лучше использовать тестовый аккаунт.
MAXWin — неофициальный клиент. Проект никак не связан с разработчиками MAX и не является официальным приложением.
Это исследовательский, экспериментальный и местами откровенно вайбкодный проект для энтузиастов Windows Phone.
Используйте на свой страх и риск.
- KometTeam / Komet — референс открытого клиента.
- Windows Phone — за то, что умер, но не сдался.