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

17.09.21

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

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

Скачать файл

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

Наименование SM По подписке [?] Купить один файл
1С Push-уведомления с помощью Firebase Cloud Messaging:
.rar 13,32Kb
8
8
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С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

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

2880 руб.

03.12.2018    56920    178    103    

169

SALE! 25%

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

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

13200 9900 руб.

27.12.2021    35611    94    161    

189

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

310

1С-программирование Мобильная разработка Программист Стажер Платные (руб)

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

12900 руб.

08.06.2023    7199    1    0    

47

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

В этом релизе собрано много нового из области интерфейса, связи, хранения и важные новые способы управления. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

25.06.2024    1824    18    informa1555    0    

32

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

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

1 стартмани

20.03.2024    1981    1    informa1555    1    

44

Мобильная разработка Языки и среды 1С:Элемент Программист Бесплатно (free)

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

19.03.2024    12790    ROk_dev    69    

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