Многие разработчики сталкиваются с ситуацией, когда мобильный клиент 1С исправно получает уведомления в активном или свернутом режиме, но стоит пользователю полностью закрыть приложение («смахнуть» его из списка запущенных), как связь обрывается. В этой статье мы подробно разберем, почему так происходит, и проанализируем шаги, необходимые для реализации гарантированной доставки уведомлений с использованием сервисов Google Firebase и Сборщика мобильных приложений 1С.
Разберем фундаментальную причину проблемы. Стандартный мобильный клиент, который вы скачиваете из Google Play или App Store — это универсальная «оболочка», созданная фирмой 1С. Для того чтобы операционная система Android или iOS могла доставить push-уведомление конкретному приложению, это приложение должно быть зарегистрировано в соответствующем облачном сервисе (FCM для Android или APNs для iOS) с уникальным идентификатором (Package Name/Bundle ID).
Поскольку идентификатор стандартного мобильного клиента принадлежит фирме 1С, вы не можете зарегистрировать его в своем проекте Firebase. Следовательно, сервер 1С не может отправить сообщение «адресно» в этот APK. Чтобы обойти это ограничение и заставить уведомления приходить даже при закрытом приложении, нам необходимо собрать собственный APK-файл с вашим уникальным идентификатором.
Проанализируем процесс подготовки серверной инфраструктуры уведомлений. В современных реалиях Google перешел на протокол FCM HTTP v1, который требует более сложной авторизации, чем старый «Ключ сервера».
com.mycompany.mobileclient), которое вы позже укажете в сборщике 1С.google-services.json. Этот файл содержит конфигурацию для подключения вашего будущего приложения к сервисам Google.Важный нюанс: Старый способ с использованием простого ServerKey (Legacy API) считается устаревшим. Рекомендуем сразу настраивать работу через JSON-файл ключа сервисного аккаунта.
Выясним, как превратить вашу конфигурацию в полноценное Android-приложение. Для этого используется специальная конфигурация «Сборщик мобильных приложений».
Рассмотрим основные действия в сборщике:
google-services.json, полученный на предыдущем шаге.После сборки мы получим собственный APK. Теперь операционная система будет воспринимать это приложение как доверенный приемник уведомлений от вашего проекта Firebase.
Чтобы сервер 1С знал, кому отправлять уведомление, мобильное приложение должно сообщить ему свой уникальный токен. Рассмотрим, как это реализовать программно. Получение токена должно происходить на стороне мобильного клиента.
// В модуле управляемого приложения (на клиенте)
Процедура ПриНачалеРаботыСистемы()
#Если МобильныйКлиент Тогда
Уведомления = ДоставляемыеУведомления.ПолучитьДанныеДоставки();
Если Уведомления <> Неопределено Тогда
// Сообщаем серверу наш идентификатор
ИдентификаторДоставки = Уведомления.Идентификатор;
ПодключитьИдентификаторНаСервере(ИдентификаторДоставки);
КонецЕсли;
#КонецЕсли
КонецПроцедуры
Этот идентификатор (токен) необходимо сохранить в базе данных на сервере, привязав его к конкретному пользователю. Удобнее всего использовать для этого Регистр сведений.
Теперь разберем, как инициировать отправку push-уведомления при создании документа или другом событии. Для этого используется объект ДоставляемоеУведомление.
Процедура ОтправитьPushПользователю(ТокенПриемника, ТекстСообщения)
Уведомление = Новый ДоставляемоеУведомление;
Уведомление.Текст = ТекстСообщения;
Уведомление.Заголовок = "Новое событие в 1С";
Уведомление.Звук = "default";
// Формируем параметры для FCM
ПараметрыFCM = Новый Соответствие;
// Если нужно передать данные внутрь приложения
Уведомление.Данные = Новый Структура("ИмяДокумента, Ссылка", "ЗаказПокупателя", СсылкаНаОбъект);
// Отправка через встроенные средства платформы 1С
// КлючСервера - это либо строка ключа (Legacy), либо путь к JSON-файлу сервисного аккаунта
Результат = ДоставляемыеУведомления.Отправить(Уведомление, ТокенПриемника);
КонецПроцедуры
Обратите внимание: Чтобы уведомление гарантированно «разбудило» закрытое приложение, оно должно иметь тип Notification (уведомление), а не просто Data (данные). Платформа 1С при заполнении свойств Текст и Заголовок автоматически формирует правильную структуру запроса к Google.
Проанализируем ситуацию, когда даже в собранном APK уведомления приходят с задержкой. В современных версиях Android (12+) существуют жесткие ограничения энергопотребления (Doze Mode). Чтобы их обойти, придерживаемся следующих правил:
priority: high). В 1С это регулируется параметрами в объекте уведомления.Если ваша задача — не столько уведомления в фоне, сколько быстрый запуск нужной базы в стандартном клиенте (как обсуждалось в сообщениях 30-33), можно использовать URL-схемы. Ссылка вида e1c://server/address#base_name при нажатии на нее в смартфоне автоматически откроет мобильный клиент и запустит указанную базу. Это не решит проблему уведомлений при закрытом приложении, но значительно упростит навигацию для пользователя без сборки собственного APK.
Подводя итог: для полноценной работы уведомлений «как в мессенджерах» при закрытом приложении, сборка собственного мобильного приложения является обязательным этапом. Это позволяет привязать приложение к вашему собственному аккаунту Firebase и получить полный контроль над процессом доставки сообщений.