Как настроить push-уведомления в мобильном клиенте 1С, чтобы они приходили при закрытом приложении?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Многие разработчики сталкиваются с ситуацией, когда мобильный клиент 1С исправно получает уведомления в активном или свернутом режиме, но стоит пользователю полностью закрыть приложение («смахнуть» его из списка запущенных), как связь обрывается. В этой статье мы подробно разберем, почему так происходит, и проанализируем шаги, необходимые для реализации гарантированной доставки уведомлений с использованием сервисов Google Firebase и Сборщика мобильных приложений 1С.

Почему стандартный мобильный клиент 1С не подходит?

Разберем фундаментальную причину проблемы. Стандартный мобильный клиент, который вы скачиваете из Google Play или App Store — это универсальная «оболочка», созданная фирмой 1С. Для того чтобы операционная система Android или iOS могла доставить push-уведомление конкретному приложению, это приложение должно быть зарегистрировано в соответствующем облачном сервисе (FCM для Android или APNs для iOS) с уникальным идентификатором (Package Name/Bundle ID).

Поскольку идентификатор стандартного мобильного клиента принадлежит фирме 1С, вы не можете зарегистрировать его в своем проекте Firebase. Следовательно, сервер 1С не может отправить сообщение «адресно» в этот APK. Чтобы обойти это ограничение и заставить уведомления приходить даже при закрытом приложении, нам необходимо собрать собственный APK-файл с вашим уникальным идентификатором.

Шаг 1. Регистрация проекта в Firebase Cloud Messaging (FCM)

Проанализируем процесс подготовки серверной инфраструктуры уведомлений. В современных реалиях Google перешел на протокол FCM HTTP v1, который требует более сложной авторизации, чем старый «Ключ сервера».

  1. Перейдем в консоль Firebase и создадим новый проект.
  2. В настройках проекта выберем создание Android-приложения. Здесь критически важно указать то имя пакета (например, com.mycompany.mobileclient), которое вы позже укажете в сборщике 1С.
  3. Скачаем файл google-services.json. Этот файл содержит конфигурацию для подключения вашего будущего приложения к сервисам Google.
  4. В разделе «Service Accounts» (Сервисные аккаунты) создадим новый закрытый ключ и скачаем его в формате JSON. Именно этот файл понадобится серверной части 1С для авторизации при отправке уведомлений.

Важный нюанс: Старый способ с использованием простого ServerKey (Legacy API) считается устаревшим. Рекомендуем сразу настраивать работу через JSON-файл ключа сервисного аккаунта.

Шаг 2. Использование Сборщика мобильных приложений 1С

Выясним, как превратить вашу конфигурацию в полноценное Android-приложение. Для этого используется специальная конфигурация «Сборщик мобильных приложений».

Рассмотрим основные действия в сборщике:

После сборки мы получим собственный APK. Теперь операционная система будет воспринимать это приложение как доверенный приемник уведомлений от вашего проекта Firebase.

Шаг 3. Получение идентификатора устройства (Token)

Чтобы сервер 1С знал, кому отправлять уведомление, мобильное приложение должно сообщить ему свой уникальный токен. Рассмотрим, как это реализовать программно. Получение токена должно происходить на стороне мобильного клиента.


// В модуле управляемого приложения (на клиенте)
Процедура ПриНачалеРаботыСистемы()
    #Если МобильныйКлиент Тогда
        Уведомления = ДоставляемыеУведомления.ПолучитьДанныеДоставки();
        Если Уведомления <> Неопределено Тогда
            // Сообщаем серверу наш идентификатор
            ИдентификаторДоставки = Уведомления.Идентификатор;
            ПодключитьИдентификаторНаСервере(ИдентификаторДоставки);
        КонецЕсли;
    #КонецЕсли
КонецПроцедуры

Этот идентификатор (токен) необходимо сохранить в базе данных на сервере, привязав его к конкретному пользователю. Удобнее всего использовать для этого Регистр сведений.

Шаг 4. Отправка уведомления с сервера

Теперь разберем, как инициировать отправку push-уведомления при создании документа или другом событии. Для этого используется объект ДоставляемоеУведомление.


Процедура ОтправитьPushПользователю(ТокенПриемника, ТекстСообщения)
    Уведомление = Новый ДоставляемоеУведомление;
    Уведомление.Текст = ТекстСообщения;
    Уведомление.Заголовок = "Новое событие в 1С";
    Уведомление.Звук = "default";
    
    // Формируем параметры для FCM
    ПараметрыFCM = Новый Соответствие;
    // Если нужно передать данные внутрь приложения
    Уведомление.Данные = Новый Структура("ИмяДокумента, Ссылка", "ЗаказПокупателя", СсылкаНаОбъект);
    
    // Отправка через встроенные средства платформы 1С
    // КлючСервера - это либо строка ключа (Legacy), либо путь к JSON-файлу сервисного аккаунта
    Результат = ДоставляемыеУведомления.Отправить(Уведомление, ТокенПриемника);
КонецПроцедуры

Обратите внимание: Чтобы уведомление гарантированно «разбудило» закрытое приложение, оно должно иметь тип Notification (уведомление), а не просто Data (данные). Платформа 1С при заполнении свойств Текст и Заголовок автоматически формирует правильную структуру запроса к Google.

Шаги по оптимизации для фонового режима

Проанализируем ситуацию, когда даже в собранном APK уведомления приходят с задержкой. В современных версиях Android (12+) существуют жесткие ограничения энергопотребления (Doze Mode). Чтобы их обойти, придерживаемся следующих правил:

  1. Приоритет: В структуре push-сообщения со стороны сервера должен быть установлен высокий приоритет (priority: high). В 1С это регулируется параметрами в объекте уведомления.
  2. Разрешения: В сборщике мобильных приложений проверьте, что установлены разрешения на работу в фоновом режиме и автозапуск.
  3. Энергопотребление на телефоне: Пользователю может потребоваться вручную отключить «Оптимизацию батареи» для вашего приложения в настройках Android, чтобы система не «убивала» фоновые процессы получения сообщений.

Альтернатива: Использование внешних ссылок (Deep Linking)

Если ваша задача — не столько уведомления в фоне, сколько быстрый запуск нужной базы в стандартном клиенте (как обсуждалось в сообщениях 30-33), можно использовать URL-схемы. Ссылка вида e1c://server/address#base_name при нажатии на нее в смартфоне автоматически откроет мобильный клиент и запустит указанную базу. Это не решит проблему уведомлений при закрытом приложении, но значительно упростит навигацию для пользователя без сборки собственного APK.

Подводя итог: для полноценной работы уведомлений «как в мессенджерах» при закрытом приложении, сборка собственного мобильного приложения является обязательным этапом. Это позволяет привязать приложение к вашему собственному аккаунту Firebase и получить полный контроль над процессом доставки сообщений.

← На главную