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

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

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

Причина проблемы: специфические требования платформы 1С

Разберем ситуацию: мобильное приложение 1С использует стандартный механизм ДоставляемыеУведомления.ПодключитьОбработчикУведомлений. Когда уведомление отправляется через объект ДоставляемоеУведомление из кода 1С на сервере, платформа автоматически упаковывает данные в формат, понятный мобильному клиенту. Если же мы используем прямой вызов GCM (Google Cloud Messaging) или FCM (Firebase Cloud Messaging) API, мы часто передаем стандартный JSON, который операционная система Android отображает в трее, но сама мобильная платформа 1С игнорирует, так как не находит в нем своих служебных меток.

Ключевое решение: поле v8 в секции data

Основной секрет того, как заставить мобильное приложение 1С реагировать на внешний push, заключается в использовании специального поля v8 внутри секции data JSON-запроса. Проанализируем структуру данных, которую ожидает мобильный клиент 1С. Все данные, предназначенные для обработки внутри приложения, должны быть упакованы в одну строку и переданы под ключом v8.

Важный нюанс: значение ключа v8 должно быть не JSON-объектом, а именно экранированной строкой (serialized JSON). Внутри этой строки платформа ищет следующие сокращенные ключи:

Data messages против Notification messages

Рассмотрим два способа отправки через FCM:

  1. Notification messages: использование секции notification. В этом случае уведомление обрабатывается самой ОС Android. Если приложение активно, оно может его не заметить.
  2. Data messages: использование только секции data. Это предпочтительный вариант для 1С, так как такие сообщения передаются напрямую в приложение, что позволяет обработчику 1С сработать даже в активном режиме.

Проанализируем пример правильного формирования JSON-тела для отправки через сторонний сервис (например, PHP):


{
  "to": "TOKEN_RECEIVER",
  "data": {
    "v8": "{\"m\":\"Текст сообщения\",\"t\":\"Заголовок\",\"p\":\"Любые данные для кода 1С\"}"
  },
  "priority": "high"
}

Настройка на стороне мобильного приложения 1С

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


Процедура ПриНачалеРаботыСистемы()
    ПодключитьОбработчикУведомлений();
КонецПроцедуры

Процедура ПодключитьОбработчикУведомлений()
    ДоставляемыеУведомления.ПодключитьОбработчикУведомлений("ОбработкаУведомления");
КонецПроцедуры

Процедура ОбработкаУведомления(Уведомление, Локальное, Показано) Экспорт
    // Здесь Уведомление.Данные будут содержать то, что мы передали в ключе "p"
    Сообщить("Получено уведомление: " + Уведомление.Текст);
КонецПроцедуры

Дополнительные параметры: Имя пакета и Каналы

Выясним еще несколько причин, по которым уведомление может не доходить до обработчика:

1. Ограничение имени пакета (Package Name): В запросе к API крайне желательно указывать параметр restricted_package_name. Платформа 1С фильтрует уведомления, и если идентификатор приложения (например, com.mycompany.myapp) не совпадает с тем, что указано в запросе, обработчик может не вызваться. Убедитесь, что вы используете правильное имя пакета, которое было задано в сборщике мобильных приложений.

2. Каналы уведомлений (Notification Channels): В современных версиях Android (8.0+) уведомления требуют указания ID канала. Платформа 1С при установке обычно создает канал с идентификатором 1C_Notifications. Если вы отправляете уведомление через внешний API, попробуйте добавить в секцию android или data параметр android_channel_id со значением 1C_Notifications.

Реализация иконки уведомления

Многие сталкиваются с тем, что иконка в push-уведомлении от 1С отличается от иконки, отправленной через GCM API. Это происходит потому, что 1С ищет ресурсы внутри скомпилированного APK. Чтобы иконка отображалась корректно, при отправке через внешний сервис в ключе i (внутри строки v8) нужно указывать имя файла иконки без расширения, которое присутствует в ресурсах вашего собранного приложения (например, icon).

Итоги и рекомендации

Рассмотрим пошаговый алгоритм действий для успешной интеграции:

  1. Формируйте Payload правильно: используйте секцию data, а не notification.
  2. Используйте ключ v8: упаковывайте все данные (заголовок, текст, параметры) в JSON-строку внутри этого поля.
  3. Проверяйте имя пакета: оно должно строго соответствовать тому, что указано в свойствах мобильного приложения 1С.
  4. Устанавливайте высокий приоритет: параметр "priority": "high" гарантирует доставку сообщения даже в режиме экономии энергии.

Следуя этим правилам, вы обеспечите стабильную работу push-уведомлений, отправленных из любых внешних систем, и их корректную обработку в мобильном клиенте на платформе 1С.

← На главную