Библиотека MAX Bridge открывает мини-приложению доступ к системным возможностям — от диплинков до сканера QR-кодов. Первый раздел документации — «Работа с данными инициализации» — объединяет пять методов, и два из них, initData и initDataUnsafe, отдают один и тот же набор стартовых данных о пользователе. Разница не в содержимом, а в том, какой из двух можно использовать для проверки подлинности.
Один раздел, пять методов, два — про одни данные
В документации MAX Bridge (dev.max.ru) раздел «Работа с данными инициализации» открывает список функциональности библиотеки. Документация перечисляет сразу пять методов одним списком:
Чтобы получить инициализационные данные, в объекте WebApp предусмотрены следующие методы.
dev.max.ru, раздел «Работа с данными инициализации»Три из пяти — platform, version и deviceName — сообщают о платформе, версии приложения и устройстве, с которого запущено мини-приложение. Оставшиеся два, initData и initDataUnsafe, — про сами стартовые данные: кто открыл мини-приложение, в каком чате и с каким параметром запуска.
Строка для сервера и объект без права на проверку
Первый метод возвращает данные в виде закодированной строки:
Строка со стартовыми параметрами в URL-кодировке.
window.WebApp.initData, dev.max.ruДокументация уточняет назначение этой строки — закодированные в UTF-8 данные предназначены именно для проверки на сервере:
Содержит данные о пользователе и другие инициализационные данные в виде закодированной в UTF-8 строки для валидации на стороне сервера.
window.WebApp.initData, dev.max.ruВторой метод отдаёт те же данные в удобном виде — готовым JSON-объектом:
Объект, который содержит данные из initData в виде JSON-объекта.
window.WebApp.initDataUnsafe, dev.max.ruСразу под описанием — предупреждение, из-за которого в названии метода и стоит слово Unsafe:
Обратите внимание, что объект нельзя использовать для валидации данных.
window.WebApp.initDataUnsafe, dev.max.ruУдобный для чтения объект годится, чтобы быстро подставить имя пользователя в интерфейс, но не годится, чтобы на его основании принимать решения, которые требуют уверенности в подлинности данных.
Hash есть в обоих — использовать можно только один
Оба метода описывает один и тот же интерфейс InitData, и в нём есть поле hash. Документация в таблице свойств объясняет его назначение так:
Хеш переданных параметров, который можно использовать для проверки их достоверности.
dev.max.ru, раздел «Работа с данными инициализации», таблица свойств InitDataФормулировка относится к полю в целом, а не отдельно к строке и не отдельно к объекту, — но именно объект initDataUnsafe парой абзацев выше прямо помечен как непригодный для валидации. Получается, что hash физически присутствует и в initData, и в initDataUnsafe, но в разделе нет ни слова о том, можно ли проверять достоверность по значению hash, если оно взято из initDataUnsafe, а не из исходной строки initData. Единственная явная инструкция документации — использовать для проверки именно строку.
Что ещё лежит в стартовых данных
Кроме hash, в объекте InitData документация перечисляет ещё несколько полей. У поля auth_date указан не только тип, но и рекомендация по времени жизни:
Время выдачи данных. Позволяет определить момент инвалидации данных. Рекомендуемый интервал составляет 1 час.
dev.max.ru, раздел «Работа с данными инициализации», таблица свойств InitData, поле auth_dateПри этом тип поля в документации — просто number: секунды это unix-времени или миллисекунды, раздел не уточняет. Ещё одно поле — необязательное и не про самого пользователя:
IP-адрес пользователя.
dev.max.ru, раздел «Работа с данными инициализации», таблица свойств InitData, поле ipРядом в таблице — идентификатор сессии:
Уникальный идентификатор текущей сессии.
dev.max.ru, раздел «Работа с данными инициализации», таблица свойств InitData, поле query_idОбъект user несёт имя, фамилию, никнейм, код языка интерфейса и ссылку на фото профиля. Объект chat — идентификатор чата и один из трёх типов:
Тип чата (DIALOG / CHAT / CHANNEL).
То есть уже на старте мини-приложение знает не только кто его открыл, но и в каком именно типе переписки — личном диалоге, групповом чате или канале.
Частые вопросы
Чем initData отличается от initDataUnsafe в MAX Bridge?
initData — закодированная строка для проверки на сервере, initDataUnsafe — те же данные в виде готового JSON-объекта, который документация прямо запрещает использовать для валидации.
Можно ли проверить подлинность данных по hash из initDataUnsafe?
Документация об этом не говорит: единственная явная инструкция — валидировать по строке initData, а объект initDataUnsafe отдельно помечен как непригодный для проверки.
В каких единицах измеряется auth_date в MAX Bridge?
Тип поля — просто number, документация не уточняет, секунды это или миллисекунды; указан только рекомендуемый интервал инвалидации — 1 час.
Какие типы чата возвращает поле chat.type в MAX Bridge?
Три значения: DIALOG для личного диалога, CHAT для группового чата и CHANNEL для канала.
Развиваете канал или бота в MAX?
Добавьте его в каталог MaxOfficial — читатели находят каналы через поиск и подборки, а статистика копится автоматически.
Добавить канал в каталог







