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

17.09.21

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

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

Скачать исходный код

Наименование Файл Версия Размер
1С Push-уведомления с помощью Firebase Cloud Messaging:
.rar 13,32Kb
7
.rar 13,32Kb 7 Скачать

Для того, чтобы отправить 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С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

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

2880 руб.

03.12.2018    55159    139    102    

162

SALE! 25%

Что нам стоит бота построить? Нарисуем - будет жить! Графический конструктор телеграм-ботов/Telegram

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

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

13200 9900 руб.

27.12.2021    33901    82    159    

177

"Мобильный ТСД" - инвентаризация и сбор штрихкодов для iOS и Android

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

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

2000 руб.

22.04.2019    92485    521    186    

298

Магазин 15 - приемка товара по штрихкодам или инвентаризация в торговом зале

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

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

12950 руб.

30.05.2023    3482    2    0    

4

Работа с графикой в браузере (SimpleWEB). Векторный редактор

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

В SimpleWEB добавились средства для работы с графикой и отслеживание событий мыши, в онлайн редактор https://seditor.ru:1555/ добавился «Векторный редактор» на этом API. Теперь можно нарисовать схемы складов на ПК, сделать карты (*.sug-файлы) для мобильной платформы SimpleUI, выводить данные из 1С в графическом виде. Таким образом, API для работы с векторными файлами теперь есть и в веб- и в мобильной платформе, а также средства для создания и редактирования векторных файлов есть тоже в обеих платформах.

1 стартмани

20.03.2024    1657    0    informa1555    1    

41

Зачем нам 1С:Элемент

Мобильная разработка Языки и среды Бесплатно (free)

Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику

19.03.2024    9801    ROk_dev    67    

41

JavaScript в Simple

Мобильная разработка Бесплатно (free)

В SimpleUI и SimpleWEB, наряду с обработчиками на python и онлайн (1С и т.д.) добавляется интерпретатор JavaScript. В андроид платформе он скорее играет на поле python, т.к. является оффлайновым решением для самостоятельной обработки и расширяет аудиторию разработчиков для разработки самостоятельных решений. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

12.02.2024    1704    informa1555    0    

25
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1293 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 90 21.10.21 07:35 Сейчас в теме
(6)Только после вашего сообщения обратил внимание, что есть какое-то ограничение не более 100, но чего 100?! Так и не понял.
Как вы получили эту ошибку "SenderId mismatch", это ответ на что?
8. dimasts 22 24.10.21 17:34 Сейчас в теме
(7) Ограничение действует на запрос доступа к аккаунту перед авторизацией.
Целый год всё работало нормально. Потом перестали приходить. Я начал разбираться и увидел эту ошибку в ответ на запрос отправки уведомления по http. Потом выяснилось, что токены которые генерирует
ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений()

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

генерируют неверные токены, которые не проходят проверку даже на сайте консоли в тестере запросов, который требует только токен для проверки, тоесть ошибка может быть только в нём.
9. zykov_vitaliy 90 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 171 20.04.23 18:20 Сейчас в теме
Коллеги можно отправлять уведомления в мобильном приложении. И другие данные и даже отчёты Дзен MIE
или публикация инфостарт Инфостарт MIE
13. KHoroshulinAV 171 20.04.23 22:12 Сейчас в теме
MIE так-же работает и с firebase
Оставьте свое сообщение