Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн - все это содержит в себе решение 1С "Штрихкод-информер" (штрих-код чекер). Отправка данных со смартфона выполняется либо на...
Проект демонстрирует практическое использование системы доставки push-уведомлений, созданных средствами платформы 1С, до мобильного приложения. Возможно использование не только для мобильных приложений на базе 1С.
Арт.: 2767575
Поясним как выглядит общая схема. Есть три актора - мобильное приложение (устройство) -получатель push-сообщения; приложение-сервер, которое является отправителем сообщений; FCM - сервис-провайдер.
Провайдер содержит список возможных приложений-получателей, он получает от приложения-сервера текст уведомления вместе с идентификатором устройства-получателя и передает его по сети интернет на конкретное мобильное устройство. Какое именно - определяется средствами Google, установленными на этом устройстве. Приложение на мобильном устройстве создает определенный идентификатор этого устройства, передает его приложению-серверу, под ним же устройство зарегистрировано в сервисах Google. Приложение сервер регистрируется в сервисе FCM, после этого оно может аутентифицироваться и передавать в сервис сообщения, которые сервису необходимо отправлять получателям.
Ставилась задача выполнить все средствами платформы 1С, без привлечения сторонних библиотек.
Регистрируемся в сервисе FCM по адресу https://console.firebase.google.com/.
Создаем свои проект и приложение. Важные данные на этом этапе: Project ID и Project number.
Затем надо скачать в разделе App файл google-service.json, он будет нужен нам на этапе сборки мобильного приложения.
На этом шаге необходимо перейти в раздел Service accounts и сформировать json-файл закрытого ключа. Этот файл нам нужен будет для использования непосредственно в код. Отнеситесь к нему как к конфиденциальной информации, получивший его сможет рассылать сообщения от вашего имени.
Перед отсылкой сообщения для рассылки в FCM, нам надо авторизоваться в сервисах Google, чтобы получить access-token. Этот токен будет использоваться при отсылке сообщений в сервис.
Авторизация происходит по OAuth2, для нее мы формируем JWT-токен, подписываем его ранее полученным закрытым ключом и отсылаем на адрес авторизации Google.
Есть некоторые особенности, которые надо проговорить отдельно.
После создания токен подписывается приватным ключом по RS256 (RSASSA-PKCS1-v1_5 с SHA256). Тут есть нюанс: как понятно по наименованию алгоритма, взятому из документации платформы, метод Подписать() объекта ТокенДоступа просит на вход ключ в формате PKCS#1 v1.5., а FCM выдает закрытый ключ в более продвинутом стандарте PKCS#8. Если подавать его в метод в исходном виде, то получим сообщение "Ошибка создания подписи". Пришлось написать функцию-конвертер. Очень неудобно, собственно, именно на разбор схем кодирования и работу с бинарными данными ушло большое количество времени, надеюсь, этот пробел разработчики платформы устранят и метод подписи будет принимать ключ любого стандарта, "разбираясь" с ним внутри своей реализации. В самом методе шифрования, к счастью, разбираться не пришлось.
В стандарте на PKCS#8 (он сам не очень большой) в разделе 5 Private-Key Information Syntax написано, что нужный нам приватный ключ есть один из реквизитов некоторой структуры.
Соответственно, нам надо прочитать этот реквизит, пропустив последовательно все байты, что встретятся до него - пропускаем заголовок SEQUENCE, реквизиты version и privateKeyAlgorithm. Здесь мы смотрим, как кодируются поля структуры и соответственно выполняем побайтовое чтение.
Проще всего проверить полученный на выходе функции преобразования новый ключ при помощи утилиты openssl. Сохраните ключ в текстовый файл, и выполните команду в консоли:
openssl rsa --in text.key -check -noout
Если все в порядке, утилита так и напишет. Ключ check - проверка, noout - не показывать проверяемые ключ на экране. Если нет - косяк при реализации функции (да, было, получилось не сразу)).
Токен готов и подписан. Обращаю внимание на параметры scope и aud. В scope надо указать правильную область действия, в aud - адрес сервера, для которого предназначен формируемый токен. При ошибке в этих полях токен не будет принят.
Ваша авторизация, генерация JWT и подпись закрытым ключом работают нормально. Подвела генерация токена (идентификатора) получателя, этого мы еще коснемся.
Эта ошибка означает, что токен устройства, на который вы отправляете пуш-уведомление, больше недействителен на серверах Google. Сервис FCM считает это устройство отписанным от уведомлений. Надо получить новый идентификатор устройства.
В мобильном приложении нам надо получить идентификатор устройства, по которому устройство будет определяться провайдером как получатель уведомлений. Как написано в документации, идентификатор может периодически меняться, поэтому его надо получать регулярно и пересылать приложению-серверу.
Этот фрагмент кода исполняется каждый раз при старте приложения на мобильном устройстве. Он получает все идентификаторы и отправляет их на http-сервис. Также выполняется подключение обработчика push-уведомлений.
Идентификатор устройства меняется не только при смене устройства, но и при переустановке приложения даже той же самой версии, поэтому логично связывать идентификаторы с учетной записью пользователя, это позволит оперировать не обезличенными идентификаторами.
Странно отрабатывает метод ПолучитьИдентификаторПодписчикаУведомлений, для телефона марки Huawei, подключенного через кабель возвращает тип подписчика HPK, а после развертывания собранного приложения возвращает тип FCM.
Само уведомление - это простая структура, отправляемая в теле запроса на адрес fcm.googleapis.com. Адрес ресурса формируется с использованием имени проекта /v1/projects/project_id/messages:send.
При отправке как раз и используется ранее полученный токен, он указывается в заголовке Authorization.
Если вам надо тестировать отправку уведомлений без реальной доставки пользователями, то формируйте сообщение с дополнительным тегом "validate_only": true, описано тут https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages/send.
Решение определяется исключительно логикой работы приложения, как минимум необходимо наличие в коде объявления процедуры.
При сборке надо включить в дистрибутив полученный файл google-services.json. Необходимо, чтобы полный идентификатор приложения google в сборщике полностью совпадал с Package name в консоли сервиса FCM, в противном случае сборщик будет выдавать ошибку.
Разработка велась на Windows 11 26H2, платформе 8.5.4.1306, мобильной платформе 8.5.4.28, Apache 2.4. Тестировалось на устройстве Huawei c OC Android и надстройкой EMUI и установленными сервисами microG 0.3.16.252432-hw и GBox 1.8.3.61. Для них в настройках приложений необходимо разрешить уведомления, процесс не описываю, т.к., судя по информации из интернета, последовательность действий зависит от установленных версий. По итогу, отправленные с ПК уведомления успешно приходят на устройство, даже если мобильная платформа закрыта, если выгружена из памяти.
Прилагаются файлы приложений, на которых отлаживался обмен между компонентами системы, архив с файлами dt и cf приложения-сервера и мобильного приложения, apk-архивы собранного мобильного приложения для разных платформ, краткая инструкция по настройке взаимодействия компонентов. Приложение сервер содержит обработку для рассылки уведомлений на мобильное устройство, есть тестовое наполнение информационной базы. Это прототипы для понимания как все работает, не более. Без доработки нельзя применять в реальных проектах. Например, необходим обмен между мобильным приложением и приложением-сервером по https, иной подход к хранению закрытого ключа и некоторые другие детали.
Возможна отсылка сообщений не только для мобильных приложений, созданных на базе платформы 1С, но и для приложений, написанных на любом языке, при условии, что приложение сможет выдать идентификатор устройства во внешний сервис.
В планах теперь познакомиться с Huawei Push Kit.
Для получения дополнительной информации и помощи в настройке модуля под нужды вашего бизнеса — оставьте заявку

| Статистика: | |
|---|---|
| Просмотры | 312 |
| Загрузки | 0 |
| Рейтинг | 0 |
| Создание | 31.08.26 11:41 |
| Обновление | 31.08.26 11:41 |
| № Публикации | 2767575 |
| Характеристики: | |
| Теги | |
| Рубрики | Мобильная разработка |
| Кому | Разработчик |
| Тип файла | Архив с данными |
| Платформа | 1С 8.5 |
| Конфигурация | Универсальные |
| Операционная система | Не имеет значения |
| Страна | Россия |
| Отрасль | Не имеет значения |
| Налоги | Не имеет значения |
| Вид учета | Не имеет значения |
| Доступ к файлу | Платные (руб) |
| Код открыт | Да |
Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн - все это содержит в себе решение 1С "Штрихкод-информер" (штрих-код чекер). Отправка данных со смартфона выполняется либо на...
3050 руб.
Простой мобильный ТСД (терминал сбора данных) сканер для 1С для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный серви...
3050 руб.
Android смартфон как беспроводной сканер штрих-кодов, QR-кодов (2D), терминал сбора данных (ТСД), подписка на штрих-код Комбайн
2196 руб.
Мобильное приложение "Контроль билетов" - готовое решение для контроля электронных билетов на различных мероприятиях. Удобный и простой инструмент для пропуска посетителей на мероприятия по электронным билетам с использованием технологии шт...
70150 руб.
Часто в программе «1С:Бухгалтерию государственного учреждения 8» (1С:БГУ), возникает потребность в оперативном согласовании и подписании первичных документов (актов, накладных, требований) сотрудниками, находящимися вне офиса. Для упроще...
15250 руб.
Расширение для сбора логов на работающей конфигурации 1С, отчёт с оценкой APDEX. Оптимизация и оценка запросов API с базой.
18300 руб.
"МРМ:Маркировка" для работы с конфигурациями 1С - готовое решение, позволяющее быстро автоматизировать работу учетной системы 1С на ордерном и безордерном складе при работе как с товарами, подлежащими обязательной маркировке, так и с товара...
19000 руб.
Планизатор ПРОФ - управление задачами разъездных сотрудников. Диспетчер в 1С - планирует, назначает исполнителей, прикрепляет документацию к задаче. Исполнитель в мобильном приложении - отмечает исполнение, прикрепляет фотоотчеты, отмечает...
1016 руб.
Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegr...
13420 руб.
Подсистема Мобильные заказы предназначена для менеджеров по продажам или торговых представителей, которым требуется принимать заказы от клиентов вне офиса.
7320 руб.