1С Push-уведомления с помощью Firebase Cloud Messaging

17.09.21

Разработка - Мобильная разработка

Отправка Push-уведомлений из 1С в мобильное приложение за 6 шагов.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
1С Push-уведомления с помощью Firebase Cloud Messaging:
.rar 13,32Kb
18 4 550 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Для того, чтобы отправить Push-уведомление нам необходимо создать JSON и отправить его HTTP запросом. Сложность заключается в том, что при отправке HTTP запроса нам необходимо в нем указать access token. access token можно получить авторизовавшись в гугле. 6 шагов для отправки push-уведомлений:

  • Для того, чтобы авторизоваться в гугле, нам необходимо создать проект в гугл консоле https://console.cloud.google.com/apis/
  • После создания проекта создаем реквизиты для входа как показано на скринах, от туда копируем client_id и client_secret
  • Переходим в firebase, отрываем созданный на первом шаге проект и копируем от туда projectId как показано на скринах https://console.firebase.google.com/project/
  • Для авторизации нам необходимо получить authorization_code, его можно получить перейдя по ссылке (см. скрины)
	URL = "https://accounts.google.com/o/oauth2/v2/auth?";
	URL = URL + "client_id=" + Объект.client_id;
	URL = URL + "&response_type=code";
	URL = URL + "&scope=https://www.googleapis.com/auth/firebase.messaging";
	URL = URL + "&redirect_uri=urn:ietf:wg:oauth:2.0:oob";

	ПерейтиПоНавигационнойСсылке(URL);
  • Теперь можно авторизоваться и получить access_token, access_lifetime и refresh_token
	Парам = "";
	Парам = Парам + "code=" + Объект.authorization_code;
	Парам = Парам + "&client_id=" + Объект.client_id;
	Парам = Парам + "&client_secret=" + Объект.client_secret;
	Парам = Парам + "&redirect_uri=urn:ietf:wg:oauth:2.0:oob";
	Парам = Парам + "&grant_type=authorization_code";
	ЗащищенноеСоединениеOpenSSL = Новый ЗащищенноеСоединениеOpenSSL();
	Соединение = Новый HTTPСоединение("oauth2.googleapis.com",,,,,,ЗащищенноеСоединениеOpenSSL);
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
	Заголовки.Вставить("Content-Charset", "utf-8");		
	
	ОписаниеОшибки = "";
	
	HTTPЗапрос = Новый HTTPЗапрос("/token", Заголовки);		
	HTTPЗапрос.УстановитьТелоИзСтроки(Парам, КодировкаТекста.UTF8);
	Результат  = Соединение.ОтправитьДляОбработки(HTTPЗапрос); //POST запрос
	текДата = ТекущаяДата();
	
	СтрокаОтвет = Результат.ПолучитьТелоКакСтроку();
	
	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(СтрокаОтвет);
	ДанныеОтвет = ПрочитатьJSON(Чтение, Истина);
	Чтение.Закрыть();
	Если Не ДанныеОтвет = Неопределено Тогда
		Если НЕ ДанныеОтвет.Получить("error") = Неопределено Тогда
			ОписаниеОшибки = СтрШаблон(
			"error=%1: %2",
			ДанныеОтвет.Получить("error"),
			ДанныеОтвет.Получить("error_description")
			);
		Иначе
			Объект.access_token = ДанныеОтвет.Получить("access_token");
			expires_in = ДанныеОтвет.Получить("expires_in");
			Объект.access_lifetime = текДата+Число(expires_in);
			Объект.refresh_token = ДанныеОтвет.Получить("refresh_token"); 
		КонецЕсли;
	иначе
		ОписаниеОшибки = "Не получены данные от сервера!";		
	КонецЕсли;
	
	Если ОписаниеОшибки <> "" Тогда
		Сообщить("Ошибки при получении токена: "+ОписаниеОшибки);
	КонецЕсли;
  • После получения access_token можем отправлять push-уведомление на мобильное устройство. Для этого на потребуется ИдентификаторУстройства. Его можно взять с мобильного устройства.
	message= Новый Структура;
	message.Вставить("token", ИдентификаторУстройства);

	notification= Новый Структура;
	notification.Вставить("title", "Уведомление"));
	notification.Вставить("body", "Тестовое уведомление");
	
	message.Вставить("notification", Оповещение);
	
	android = Новый Структура;
	android.Вставить("notification", Новый Структура("visibility", "PUBLIC"));
	
	message.Вставить("android", android);
	
	PushСообщение = Новый Структура("message", message);
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON, PushСообщение);	
	ТелоЗапроса = ЗаписьJSON.Закрыть();
	
	АдресРесурса = СтрШаблон("/v1/projects/%1/messages:send", Объект.projectId);
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Authorization", "Bearer " + Объект.access_token);
	Заголовки.Вставить("Content-Type", "application/json");
	
	Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);
	Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
	
	Соединение = Новый HTTPСоединение("fcm.googleapis.com",,,,,, Новый ЗащищенноеСоединениеOpenSSL);
	Результат = Соединение.ОтправитьДляОбработки(Запрос);
	ТелоЗапроса = Результат.ПолучитьТелоКакСтроку();
	Сообщить(ТелоЗапроса);
  • Для того, чтобы получить ИдентификаторУстройства нам понадобится выполнить код ниже на мобильном устройстве. Для этого нам потребуется ProjectNumber, который можно взять из firebase как показано на скринах, он находится рядом с projectID, так же его можно найти по ссылке https://console.cloud.google.com/iam-admin/settings . Самый простой способ получить Идентификатор мобильного устройства - это написать мобильное приложение на 1С. Каждое мобильное устройство будет иметь свой Идентификатор
	ИдентификаторПодписчикаУведомлений = ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений(ProjectNumber);
	ИдентификаторУстройства = ИдентификаторПодписчикаУведомлений.ИдентификаторУстройства;
  • Время жизни access_token 1 час, поэтому периодически требуется его обновлять, для этого вам необходимо выполнить процедуру обновления access_token
	Парам = "";
	Парам = Парам + "client_id=" + Объект.client_id;
	Парам = Парам + "&client_secret=" + Объект.client_secret;
	Парам = Парам + "&refresh_token=" + Объект.refresh_token;
	Парам = Парам + "&grant_type=refresh_token";
	
	ЗащищенноеСоединениеOpenSSL = Новый ЗащищенноеСоединениеOpenSSL();
	Соединение = Новый HTTPСоединение("oauth2.googleapis.com",,,,,,ЗащищенноеСоединениеOpenSSL);
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
	Заголовки.Вставить("Content-Charset", "utf-8");		
	
	ОписаниеОшибки = "";
	
	HTTPЗапрос = Новый HTTPЗапрос("/token", Заголовки);		
	HTTPЗапрос.УстановитьТелоИзСтроки(Парам, КодировкаТекста.UTF8);
	Результат  = Соединение.ОтправитьДляОбработки(HTTPЗапрос); //POST запрос
	текДата = ТекущаяДата();
	СтрокаОтвет = Результат.ПолучитьТелоКакСтроку();
	
	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(СтрокаОтвет);
	ДанныеОтвет = ПрочитатьJSON(Чтение, Ложь);
	Чтение.Закрыть();
	Если Не ДанныеОтвет = Неопределено Тогда
		Если ДанныеОтвет.Свойство("error") Тогда
			ОписаниеОшибки = СтрШаблон(
			"error=%1: %2",
			ДанныеОтвет.error,
			ДанныеОтвет.error_description
			);
		Иначе	
			Объект.access_token = ДанныеОтвет.access_token;
			expires_in = ДанныеОтвет.expires_in;
			Объект.access_lifetime = текДата+Число(expires_in);
		КонецЕсли;
	иначе
		ОписаниеОшибки = "Не получены данные от сервера!";		
	КонецЕсли;
	
	Если ОписаниеОшибки <> "" Тогда
		ВызватьИсключение "Ошибки при получении токена: "+ОписаниеОшибки;
	КонецЕсли;

К статье прилагаю архив в котором содержится обработка по отправке push-уведомлений и мобильная конфигурация, которая покажет ИдентификаторУстройства. Весь код открытый и приведен в статье.

Разработка велась на 1С:Предприятие 8.3 (8.3.13.1644)

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Логистика, склад и ТМЦ Мобильная разработка Программист Руководитель проекта 1С v8.3 1С:Управление торговлей 11 Управленческий учет Платные (руб)

«Склад 15 ПРОДУКТОВЫЙ» - специализированное программное обеспечение для терминалов сбора данных со встроенным сканером штрихкода, объединяет в себе несколько товарных групп маркированного товара (АЛКОГОЛЬ, ПИВО, ТАБАК, ШИНЫ, ОБУВЬ, ОДЕЖДА, ПАРФЮМ, МОЛОКО, ВОДА), которые чаще всего встречаются в складской логистике вместе. Предназначено для автоматизации всех товароучетных операций на складах, обычных и адресного хранения различной сложности. Позволяет ускорить и упростить действия линейного персонала, а также снизить вероятность ошибок при работе, обусловленных человеческим фактором.

48000 руб.

30.05.2023    5139    2    0    

1

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Программист Пользователь 1С v8.3 Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Простой мобильный ТСД (терминал сбора данных) сканер для 1С для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный сервис и расширение конфигурации. Работает с конфигурациями УТ 11, ERP, КА2, Розница 2, Розница 3, УНФ 1.6, УНФ 3.0. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически.

3000 руб.

22.04.2019    109506    665    203    

353

Логистика, склад и ТМЦ Мобильная разработка 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Специализированное программное обеспечение для мобильных устройств со встроенным сканером штрихкодов. Позволяет быстро автоматизировать, оптимизировать рабочие места и бизнес процессы по учету товара в магазине. Например, приемку товара по штрихкодам или инвентаризацию прямо в торговом зале.

18500 руб.

30.05.2023    4910    4    0    

6

Мобильная разработка Сканер штрих-кода Терминал сбора данных Управляемые формы Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн - все это содержит в себе решение 1С "Штрихкод-информер" (штрих-код чекер). Отправка данных со смартфона выполняется либо напрямую в открытую форму документа, отсканировав QR-код, либо в общую корзину учетной системы, не подходя к компьютеру. Кассир или оператор сможет просмотреть список присланных данных и загрузить в любую форму, поддерживающую работу с ТСД. Для работы с мобильным приложением требуется опубликовать HTTP-сервис из поставляемого расширения.

3000 руб.

03.12.2018    65336    220    106    

184

Мобильная разработка Мессенджеры и боты 1С v8.3 Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 руб.

27.12.2021    47072    126    172    

222

Логистика, склад и ТМЦ Сканер штрих-кода Терминал сбора данных Мобильная разработка 1С v8.3 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Вашему вниманию предлагается специализированное программное обеспечение для терминалов сбора данных со встроенным сканером штрихкода. Предназначено для цифровизации всех товароучетных операций на любых складах, в том числе с адресным хранением различной сложности. Позволяет ускорить и упростить работу кладовщиков, а также снизить вероятность ошибок при работе, обусловленных человеческим фактором.

19000 руб.

28.04.2023    12120    18    4    

11

Мобильная разработка 1С v8.3 1С:Управление торговлей 11 Оптовая торговля, дистрибуция, логистика Россия Платные (руб)

"МРМ:Маркировка" для работы с конфигурациями 1С - готовое решение, позволяющее быстро автоматизировать работу учетной системы 1С на ордерном и безордерном складе при работе как с товарами, подлежащими обязательной маркировке, так и с товарами, учет которых построен на базе линейных штрих-кодов. Решение поддерживает большинство распространенных складских документов, необходимых для работы кладовщику на терминале сбора данных. Для начинающих пользователей имеется подробная инструкция по работе с приложением в разрезе видов документов.

15000 руб.

24.06.2025    1179    1    0    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1347 17.09.21 15:12 Сейчас в теме
Откройте для себя HTTPКоннектор, код будет более "чистым", все параметры запроса можно через структуры формировать.
Также код можно сопроводить коллекцией postman для тестирования без запуска 1С.
2. пользователь 17.09.21 15:23
Сообщение было скрыто модератором.
...
3. dimasts 22 19.10.21 06:07 Сейчас в теме
Возможно я всё не правильно понял, но через 100 запросов токена доступа, надо будет новый токен получать?
На скрине с токеном написано:
OAuth ограничен 100 входами в конфиденциальную область, пока экран согласия OAuth не будет проверен. Это может потребовать проверки, которая может занять несколько дней.
4. dimasts 22 19.10.21 06:29 Сейчас в теме
0(3)Наверно, здесь имеется в виду 100 получений authorization_code через браузер.
5. dimasts 22 19.10.21 12:49 Сейчас в теме
Этот метод не работает. Гугловский тестировщик говорит, что МобильныйКлиент формирует не правильные токены
{
  "error": {
    "code": 403,
    "message": "SenderId mismatch",
    "status": "PERMISSION_DENIED",
    "details": [
      {
        "@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
        "errorCode": "SENDER_ID_MISMATCH"
      }
    ]
  }
}
Показать


Фиг знает куда копать. Целый год всё работало как часы, и вот на тебе здрасте.

Любые идеи готов проверить.
6. dimasts 22 19.10.21 23:20 Сейчас в теме
Может я чего-то не знаю и этот SENDER_ID надо где-то регистрировать???
7. zykov_vitaliy 91 21.10.21 07:35 Сейчас в теме
(6)Только после вашего сообщения обратил внимание, что есть какое-то ограничение не более 100, но чего 100?! Так и не понял.
Как вы получили эту ошибку "SenderId mismatch", это ответ на что?
8. dimasts 22 24.10.21 17:34 Сейчас в теме
(7) Ограничение действует на запрос доступа к аккаунту перед авторизацией.
Целый год всё работало нормально. Потом перестали приходить. Я начал разбираться и увидел эту ошибку в ответ на запрос отправки уведомления по http. Потом выяснилось, что токены которые генерирует
ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений()

и
ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений(НомерПриложенияFCM)

генерируют неверные токены, которые не проходят проверку даже на сайте консоли в тестере запросов, который требует только токен для проверки, тоесть ошибка может быть только в нём.
9. zykov_vitaliy 91 26.10.21 03:11 Сейчас в теме
(8) Только что проверил отправку, у меня отправка работает, может потому что у меня мобильное устройство старое
10. dimasts 22 31.10.21 20:17 Сейчас в теме
(9)Фиг, знает. У меня тоже не новое. Но в конце сентября-начале октября, что-то поменялось. Проверяю токены вот здесь
Есть возможность проверить какой-нибудь токен? Может это не рабочий инструмент, а я жду, когда заработает :)
Там надо вот такую конструкцию собрать
{
  "validateOnly":,
  "message": {
    "token": "sfdglkjsdfglkjasf"
  }
}
11. temrmal 04.11.22 22:42 Сейчас в теме
Не получается по ссылке пройти для получения authorization_code. Пишет ошибку 400. Неверный запрос. Какие то изменения прошли по авторизации. Есть решение вопроса?
12. KHoroshulinAV 207 20.04.23 18:20 Сейчас в теме
Коллеги можно отправлять уведомления в мобильном приложении. И другие данные и даже отчёты Дзен MIE
или публикация инфостарт Инфостарт MIE
13. KHoroshulinAV 207 20.04.23 22:12 Сейчас в теме
MIE так-же работает и с firebase
14. nicklisoft 13.05.24 10:14 Сейчас в теме
Здравствуйте , по вашей обработке не получилось. Нашел другой способ https://infostart.ru/1c/tools/1408766/ . Для чего публиковать если не работает ?
15. zykov_vitaliy 91 17.05.24 02:55 Сейчас в теме
(14) Публикация была сделана в 21ом году, вероятно гугл поменял АПИ
16. user595058_sebuhiabbas90 03.08.24 14:55 Сейчас в теме
Я подготовил мобильное приложение, хочу настроить там push-уведомления. Можете ли вы мне помочь?
17. SVGProger 22 30.05.25 13:57 Сейчас в теме
18. zykov_vitaliy 91 10.06.25 05:12 Сейчас в теме
(17) Напишите, пожалуйста, в техподдержку, попросите вернуть СМ, я не против вам их передать обратно
Для отправки сообщения требуется регистрация/авторизация