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