Mobile 26.1000.0–26.1050.0: Мобильный Маркет и личный кабинет за опциями, push/listener ловит пуш при холодном старте
Модуль mobile пришёл в коробочный Битрикс24 сразу двумя версиями, 26.1000.0 и 26.1050.0 (прошлую, 26.975.0, мы разбирали отдельно). Почти всё новое лежит в 26.1000.0: Мобильный Маркет и личный кабинет сотрудника (оба выключены опциями) и JS-модуль push/listener, а 26.1050.0 правит только каталог вайбкод-приложений. Разбор пригодится тем, кто пишет свои мобильные расширения с пушами, и администраторам, которые решают, что включить сотрудникам.
Новое
Включите Мобильный Маркет (26.1000.0)
Маркет теперь открывается в мобильном приложении: главная, категории, поиск, установленные приложения, установка и активация демо-подписки. Включает его флаг Bitrix\Mobile\Feature\MobileMarketFeature, за которым стоит опция mobile:isMobileMarketAvailable со значением N по умолчанию. После включения появляется вкладка Маркета с кодом marketplace, её можно поставить в нижнюю панель или открыть из меню «Ещё». Экстранет-пользователи и коллаберы вкладку не видят, а без модулей market и rest её не будет ни у кого. Страницу /mobile/market/ обновление ставит само.
Пути /market/, /market/category/<код>/, /market/detail/<код приложения>/ и /market/installed/ зарегистрированы в in-app-url, такие ссылки приложение открывает своими экранами. /market/installed/?updates=Y сразу показывает приложения с доступными обновлениями.
Дайте сотрудникам расчётные листки в телефоне (26.1000.0)
Флаг PersonalAccountFeature, опция mobile:feature_personal_account_enabled. В меню «Ещё», в блоке компании, появляется «Личный кабинет» с расчётными листками и остатками отпуска. Сотрудник выбирает компанию (если их несколько) и, для листка, месяц. Потом подтверждает запрос ПИН-кодом, который приложение подставляет само, и получает документ. Данные идут через HCM Link модуля humanresources (экшены humanresources.HcmLink.SalaryVacation.*). Поэтому пункт виден, только если портал в регионе ru, в humanresources включена опция hcmlink_salary_vacation_api_available (по умолчанию N), а сотрудник сопоставлен с работником хотя бы одной компании в HCM Link. Экстранету, коллаберам и гостям пункт не показывается.
Оба флага и опцию humanresources можно включить, например, в миграции:
<?php
declare(strict_types=1);
use Bitrix\Main\Config\Option;
use Bitrix\Main\Loader;
use Bitrix\Mobile\Config\Feature;
use Bitrix\Mobile\Feature\MobileMarketFeature;
use Bitrix\Mobile\Feature\PersonalAccountFeature;
if (Loader::includeModule('mobile')) {
Feature::enable(MobileMarketFeature::class);
Feature::enable(PersonalAccountFeature::class);
}
if (Loader::includeModule('humanresources')) {
// скрытый переключатель: сеттера и настройки в админке нет, без него пункт не появится
Option::set('humanresources', 'hcmlink_salary_vacation_api_available', 'Y');
}
Feature::disable() удаляет опцию, и флаг снова выключен.
Подписывайтесь на пуши через push/listener (26.1000.0)
Пуш-слушатель теперь берут из push/listener (экспорт pushListener, методы прежние: subscribe(type, callback) и unsubscribe(type)), и у него поменялось поведение, когда на тип пуша ещё никто не подписан. Раньше такой пуш пропадал, например когда сотрудник тапнул по уведомлению, приложение стартовало с нуля, а ваше расширение ещё не загрузилось. Теперь слушатель хранит последнее сообщение каждого типа и отдаёт его первому подписчику, если с получения прошло не больше минуты.
const { pushListener } = require('push/listener');
pushListener.subscribe('MYVENDOR_ORDER_READY', (message) => {
// у сообщения есть id, type, title, body и payload
openOrder(message.payload.orderId);
});
Тип — первый аргумент new \Bitrix\Mobile\Push\Message(...), с которым ваш бэкенд отправил пуш. Функция openOrder ваша. Список штатных обработчиков в push/notifications-register зашит, своё расширение туда не добавить, подписывайтесь в его коде.
Гостей с закрытым доступом приложение больше не пускает в чат (26.1000.0)
Гость чата, которого исключили, у которого отозвали ссылку или который сам вышел, при следующем запуске приложения попадает на экран авторизации. Сервер отвечает контрактом sessionInvalid с ошибкой GUEST_SESSION_TERMINATED. Раньше приложение снова отправляло сохранённый код ссылки, и гость молча возвращался в чат, а если его токен уже не находился, входил как новый гость.
Каталог вайбкод-приложений открывается на новых (26.1000.0, 26.1050.0)
В 26.1000.0 в каталоге появились вкладка «Новые» и бейдж «Новое» у приложений. С 26.1050.0 каталог при открытии сам переключается на «Новые», если сервер сообщил о новых приложениях, а пользователь не выбирал вкладку и не начал поиск. Счётчик newAppsCount и штамп сессии просмотра отдаёт vibecodeconnector 26.300.0 из того же обновления.
Deprecated
push/listeners с экспортом PushListener помечен @deprecated, замена — pushListener из push/listener. Старый модуль остался обёрткой над тем же объектом, глобальный this.PushListener тоже на месте, поэтому ваши расширения работают без правок. Переезд сводится к замене импорта и зависимости в deps.php:
// было
const { PushListener } = require('push/listeners');
// стало
const { pushListener } = require('push/listener');
Мелочи и находки
- При создании проекта появился шаг настройки уведомлений, а форма с несохранёнными изменениями предупреждает при закрытии (26.1000.0).
(new \Bitrix\Mobile\Tab\Manager())->isTabActive('marketplace')отвечает, стоит ли доступная вкладка в нижней панели текущего пользователя (26.1000.0).- Третий новый флаг,
OnboardingPushFeature(mobile:should_send_onboarding), включает серию онбординг-пушей, но в коробке они не уйдут: агент проверяет возраст портала черезCBitrix24::getCreateTime()облачного модуля bitrix24, а без него ничего не отправляет (26.1000.0). - Пункт «Выйти на других устройствах» в настройках безопасности сервер покажет, только когда в intranetmobile появится
LoginHistory::logoutOtherDevicesAction. В intranetmobile 26.600.0 этого экшена нет (26.1000.0).
Устаревшие и удалённые API в этой версии
| Символ | Статус | Чем заменять |
|---|---|---|
push/listeners (PushListener)
|
Deprecated |
push/listener (pushListener)
|