Skip to content

Latest commit

 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

MAXWin

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.

А Windows Phone 8/8.1?

Текущий 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 сейчас не планируется.

Почему не Flutter

Открытый клиент 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 всё ещё оставлен на месте:

  1. Connect
  2. Handshake
  3. Ввести номер телефона
  4. Request code
  5. Ввести код
  6. Verify code
  7. Если пришёл REGISTER — заполнить имя и нажать Complete registration
  8. Если пришёл 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.

Используйте на свой страх и риск.

Credits

  • KometTeam / Komet — референс открытого клиента.
  • Windows Phone — за то, что умер, но не сдался.

About

Unofficial experimental MAX client for Windows 10 Mobile / Windows Phone

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages