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

17.09.21

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
1С Push-уведомления с помощью Firebase Cloud Messaging:
.rar 13,32Kb
14
14 Скачать (10 SM) Купить за 4 550 руб.

Для того, чтобы отправить 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С:Конвертация данных Платные (руб)

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

13200 руб.

27.12.2021    38279    108    161    

202

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

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

3000 руб.

03.12.2018    59357    193    103    

172

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Программист Пользователь Платформа 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. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически.

2000 руб.

22.04.2019    97373    589    189    

323

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

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

3450 руб.

28.04.2023    9517    15    0    

9

Мобильная разработка Платформа 1С v8.3 Конфигурации 1cv8 Финансовые услуги, инвестиции Управленческий учет Платные (руб)

Мобильное приложение и конфигурация 1С для автоматической торговли на бирже через API Тинькофф банка. Достаточно задать настройки, нажать «Пуск», и робот сам торгует ежедневно.

7000 руб.

25.05.2022    4683    1    0    

6

Мобильная разработка WEB-интеграция Программист Мобильная платформа Абонемент ($m)

Экспериментальный релиз и простенький скрипт к нему закрывает потребности в любых видах синхронизации между устройствами Simple и между Simple и бек-системами (например 1С). По сути – это очень простой python-скрипт, который можно запустить на доступной машине, сервере или VPS и он будет связывать клиентские устройства между собой и с 1С или другими бек-системами. В самой платформе появилось для этого множество доработок для поддержки стабильного постоянного соединения, докачки больших файлов и работе в фоне. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

23.08.2024    1240    6    informa1555    1    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1325 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 174 20.04.23 18:20 Сейчас в теме
Коллеги можно отправлять уведомления в мобильном приложении. И другие данные и даже отчёты Дзен MIE
или публикация инфостарт Инфостарт MIE
13. KHoroshulinAV 174 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-уведомления. Можете ли вы мне помочь?
Оставьте свое сообщение