Каталог решений - 1С Push-уведомления с помощью Firebase Cloud Messaging

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

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

В наличии

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

Категория:

Описание

Для того, чтобы отправить 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)

has been added to your cart:
Оформление заказа