Push сообщения с использованием Firebase cloud message

06.04.17

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

Используем новую технологию FCM, отправляем пуши на устройства на базе Android, инициируем вызов сервера клиентом с самого сервера.

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

Наименование Файл Версия Размер
Push сообщения с использованием Firebase cloud message:
.zip 13,09Kb
73
.zip 13,09Kb 73 Скачать

Всех приветствую.

Сегодня расскажу о том, как можно быстро и легко отправить произвольное push сообщение с сервера на мобильное устройство на базе Android (на iOS нет возможности попробовать, на Windows Phone этот метод работать не будет, по крайней мере пока). 

Чтобы пример был осмысленным, внесем немного ясности. Допустим есть некая конфигурация, которая крутится на неком ПК - назовем это Сервер. Есть необходимость в том, чтобы при наступлении какого-либо события на Сервере была инициирована, например, синхронизация с одним или несколькими телефоном/ТСД (далее просто мобильное устройство или МУ).  На самом деле можно придумать любой другой пример, но суть в том,  что инициатива какого-либо действия будет именно со стороны Сервера а не МУ.  Сигналом к действию для МУ и будет выступать push сообщение.

Вот такая вот небольшая задача, которую надо решить.

Нам потребуется:

  1.  Платформа 8.3.6 и выше
  2.  Мобильная платформа 8.3.6 и выше
  3.  Аккаунт Google 
  4. Около 20 мин свободного времени )

О том, как развернуть мобильную платформу для разработчика на своем устройстве писать не буду, информации много (я лично слушал бесплатный курс многоуважаемого DitriX).

Ну, приступим. Откроем конфигурацию Сервера и создадим в ней общую форму, из которой будем отправлять пуши клиенту. На форме создадим одну команду, которая и будет отправлять сообщение. Теперь разберемся, каким объектом на уровне платформы представлено push сообщение.  СП подскажет нам, что это ДоставляемоеУведомление. Его инициализация довольно простая, объект доступен везде, кроме Вэб-клиента, что нас вполне устраивает. Поместим следующий код в обработчик нажатия команды общей формы. Контекст выполнения в данном случае не важен. Сразу оговорюсь, что дальше по тексту не будет каких либо проверок на корректность данных, это и так все понятно.

    Уведомление                    = Новый ДоставляемоеУведомление;
    Уведомление.Заголовок		   = "Необходимо выполнить синхронизацию";
	Уведомление.Текст			   = "Новые задания ожидают загрузки на устройство.";
	Уведомление.Данные 			   = "ВыполнитьСинхронизацию";
	Уведомление.ЗвуковоеОповещение = ЗвуковоеОповещение.ПоУмолчанию;

Если бы мы хотели использовать локальные уведомления мобильной платформы на самом МУ, то такой инициализации было бы вполне достаточно, но у нас задача прислать пуш от сервера. Поэтому придется разобраться с еще одним свойством объекта ДоставляемоеУведомление, а именно Получатели. Это массив, то есть при желании можно отправить сообщение сразу нескольким МУ (например, если документ уже был выгружен на МУ1, а затем менеджер решил, что документ должен быть на МУ2). Тип данных элементов этого массива ИдентификаторПодписчикаДоставляемыхУведомлений, и опять же смотрим СП и видим, что о нас позаботились разработчики 1С и придумали замечатльный метод ПолучитьИдентификаторПодписчикаУведомлений, который возвращает как раз то, что нам нужно. Казалось бы практически все готово, но тут начинается самое интересное. Смотрим, что данный метод доступен только на мобильном клиенте, и вдобавок в качестве параметра необходимо указывать какой-то НомерПриложенияGoogleCloud.  Получить его довольно просто. Для этого идем в Консоль разработчика Google, авторизуемся и попадаем на стартовую страницу. Тут необходимо создать новый проект.

Создаем проект в консоли разработчика Google

Мастер создания проектов попросить придумать проекту какое-либо имя (оно будет нужно только для того, чтобы отличать проекты в самой консоли) и согласиться с условиями гугла. После создания проекта уже можно посмотреть необходимый нам НомерПриложенияGoogleCloud. Для этого перейдем в панель администрирования проекта, а затем в настройки. 

Смотрим номер проекта

Попробуем теперь получить ИдентификаторПодписчикаДоставляемыхУведомлений, который доступен через менеджера доставляемых уведомлений, но вспомним, что это все доступно только на мобильном клиенте. Поэтому надо решить, как мы будем передавать полученный ИдентификаторПодписчикаДоставляемыхУведомлений на Сервер. Способов на самом деле достаточно, но я предлагаю использовать http-сервис. Естественно он должен быть создан на Сервере. Итак, создадим http-сервис, с корневым URL testpush и одним методом типа GET, в модуль которого поместим следующий код 

    ПараметрыЗапроса = Запрос.ПараметрыЗапроса;
	Если ПараметрыЗапроса.Количество() <> 1 Тогда
		Ответ = Новый HTTPСервисОтвет(400);
		Ответ.Заголовки.Вставить("Content-Type","text/text; charset=UTF-8");
		Ответ.УстановитьТелоИзСтроки("Неверное количество параметров.");
		Возврат Ответ;
	КонецЕсли;
	
	IDПодписчика = ПараметрыЗапроса.Получить("reginfo");
	
	Константы.IDПодписчика.Установить(Новый ХранилищеЗначения(IDПодписчика, Новый СжатиеДанных(9)));
	
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.Заголовки.Вставить("Content-Type","text/text; charset=UTF-8");
	Ответ.УстановитьТелоИзСтроки("Все прошло успешно.");
	Возврат Ответ;

 Что здесь происходит? Так как мы планируем, что этот сервис будет вызываться с МУ, то ожидаем от МУ 1 параметр reginfo (можно его сделать обязательными, или вообще использовать POST и передавать все в теле, но сейчас не про это) - это сериализованный объект ИдентификаторПодписчикаДоставляемыхУведомлений. Поместим все это в Хранилище значения и  запишем в константу, предварительно создав ее. Теперь наконец-то на сервере у нас будет нужный нам параметр для отправки, но пока у нас до сих пор нечего отправлять, да и неоткуда. Займемся этим вопросом и начнем делать конфигурацию для МУ. Так как объект ИдентификаторПодписчикаДоставляемыхУведомлений имеет переменчивую природу и реккомендуется его переодически обновлять то поступим следующим образом. В  модуле управляемого приложения поместим следующий код (конфигурация для МУ)

Процедура ПриНачалеРаботыСистемы()
	
	ОбновитьIDПодписчика();

	ПодключитьОбработчикОжидания("Подключаемый_ОбновитьIDПодписчика", 7200);
	
КонецПроцедуры

Процедура Подключаемый_ОбновитьIDПодписчика() Экспорт
	ОбновитьIDПодписчика();
КонецПроцедуры

Процедура ОбновитьIDПодписчика()

	#Если МобильноеПриложениеКлиент Тогда

		НомерПроекта = ОбщийМодульВызовСервера.ПолучитьНомерПроекта();
		
		Если ПустаяСтрока(НомерПроекта) Тогда
			Возврат		
		КонецЕсли; 
		
		Попытка
			IDПодписчика = ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений(НомерПроекта);
		Исключение
			Возврат
		КонецПопытки;
		
		ПараметрыЗапроса = Новый Структура("АдресСервера, ИмяБазы, IDПодписчика");
		// указываем IP Сервера, он может быть как локальный, так и нет
		ПараметрыЗапроса.АдресСервера = "192.168.0.11";
		// имя базы, под которым она была опубликована на вэб сервере
		// о том, как выполнить публикацию информации в Интернете информации предостаточно
		ПараметрыЗапроса.ИмяБазы      = "base";
		ПараметрыЗапроса.IDПодписчика = IDПодписчика;
		
		ОбщийМодульВызовСервера.ОтправитьIDНаСервер(ПараметрыЗапроса);
		
	#КонецЕсли

КонецПроцедуры

Для того, чтобы IDПодписчика всегда был актуальным на Сервере, подключим обработчик ожидания, который будет получать "свежий" ИдентификаторПодписчикаДоставляемыхУведомлений и отправлять его на Сервер, кроме того получение и отправку будем вызывать при самом старте системы. Все эти операции можно выполнять в фоне, чтобы это было незаметно для пользователя. Важным моментом является то, что при вызове метода ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений будет происходить обращение к серверам Google, поэтому на МУ должен быть доступен Интернет. Стоит заметить, что у меня не вышло получить таким образом IDПодписчика на вирутальном устройстве, все вываливалось в ошибку неправильного параметра НомерПроекта (может это как-то связано с ограничением бесплатного функционала Genymotion), но на реальном устройстве все прекрасно отрабатывает.  В общих модулях поместим следующий код.

ОМ Вызов сервера

Функция ПолучитьНомерПроекта() Экспорт

	Возврат Константы.НомерПроекта.Получить();

КонецФункции // ПолучитьНомерПроекта()

Процедура ОтправитьIDНаСервер(ПараметрыЗапроса) Экспорт
	
	ОбщийМодульСервер.ОтправитьIDНаСервер(ПараметрыЗапроса);	

КонецПроцедуры

ОМ Сервер

Процедура ОтправитьIDНаСервер(ПараметрыЗапроса) Экспорт
	
	ПараметрыЗадания = Новый Массив();
	ПараметрыЗадания.Добавить(ПараметрыЗапроса);
	ФоновыеЗадания.Выполнить("ОбщийМодульСервер.ОтправитьIDНаСерверВФоне", ПараметрыЗадания, , "ОтправкаIDПодписчика");

КонецПроцедуры

Процедура ОтправитьIDНаСерверВФоне(ПараметрыЗапроса) Экспорт
	
	Попытка
		Соединение = Новый HTTPСоединение(ПараметрыЗапроса.АдресСервера);
		// первым параметров HTTPЗапрос является адрес ресурса
		// в данном случае сначала идет имя серверной базы, под которым она опубликована на вэб-сервере
		// т.к. мы использовали http-сервис, то после имени идет служебный параметр hs
		// при создании http-сервиса мы указывали коревой URL - testpush 
		// т.к. в сервисе 1 нас всего один метод, и он имеет тип GET, то через знак ? укажем имя параметра reginfo
		// и далее сериализованный IDПодписчика
		// если все ок, то в браузере можно набрать полученный URL и на нашем Сервере все отработает как нужно
		Запрос 	   = Новый HTTPЗапрос(ПараметрыЗапроса.ИмяБазы + "/hs/testpush?reginfo="+Сериализовать(ПараметрыЗапроса.IDПодписчика));
		Запрос.Заголовки.Вставить("Content-Type","text/xml; charset=UTF-8");
		Соединение.ВызватьHTTPМетод("GET", Запрос);	
	Исключение
	КонецПопытки;

КонецПроцедуры
 
Функция Сериализовать(Данные)

	ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(Данные);
	ЗаписьXML = Новый ЗаписьXML;
	ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
	ЗаписьXML.УстановитьСтроку(ПараметрыЗаписиXML);
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);
	Возврат ЗаписьXML.Закрыть();

КонецФункции // Сериализовать()

Теперь у нас все готово чтобы на Сервере наконец-то оказался ИдентификаторПодписчикаДоставляемыхУведомлений, запускаем мобильное приложение, указываем наш номер проекта, перезапускаем приложение и вуаля, на Сервере константа IDПодписчика теперь хранит что-то типа

<DeliverableNotificationSubscriberID xmlns="http://v8.1c.ru/8.3/data/ext" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<subscriberType>GCM</subscriberType>
	<deviceID>APA91bHaICui92Jdsbv9vrBQsmebjhXvEhUgswKRkCoFwFVHcrCR6RlRH0OqTYRNWUUoM19nv_emkL-OuLfuAwVZfz8u07SDLTwffphWJ71yzTn3YRAKL6M</deviceID>
	<applicationID>com.e1c.mobile</applicationID>
	<databaseID>7e874fd6-e97e-6c1f-ac33-683d141e189d</databaseID>
</DeliverableNotificationSubscriberID>

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

Уведомление.Получатели.Добавить(Десериализовать(Константы.IDПодписчика.Получить().Получить()));

Получаем из константы хранилище значения, а из него уже нашу сериализованную строку и десериализуем ее.

Функция Десериализовать(Данные, ТипПреобразования = Неопределено)

	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(Данные);
	ПрочитанныеДанные = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, ТипПреобразования);
	ЧтениеXML.Закрыть();
	Возврат ПрочитанныеДанные;	

КонецФункции // Десериализовать()

Теперь у нас есть готовое к отправке пуш сообщение. Для отправки  необходимо использовать метод глобального контекста ОтправкаДоставляемыхУведомлений.Отправить.  В качестве первого параметра необходимо передать сформированный объект ДоставляемоеУведомление, а вот вторым параметром идет строка с ключом авторизации для подключения к службе доставки "Google Cloud Messaging" (из СП). Стоит заметить, что Google Cloud Messaging уже не получится использовать, т.к. гугл использует более новую технологию Firebase Cloud Messaging или просто FCM. Таким образом нам нужно получить этот заветный ключ авторизации у гугла. Для этого вернемся в консоль разработчика Google и перейдем по ссылке.

Переход к FCM

Перед нами откроется страница Firebase Cloud Messaging, там много чего интересно, но нам надо перейти в консоль.

Переход к консоли FCM

Добавим новый проект, указав имя, которое мы указывали при создании проекта в консоли разработичка гугл. После ввода первых символов мастер создания предложить выбрать этот проект. Соглашаемся, также выбираем страну и нажимаем Добавить FireBase. Псоле этого возвращаемся в консоль разработчика гугл (теперь панель управления консоли примет иной вид нежели ранее) и идем в раздел Учетные данные. Тут нас будет интересовать ключи API, а именно ключ сервера.

Ключ API

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

    Уведомление                    = Новый ДоставляемоеУведомление;
    Уведомление.Заголовок		   = Заголовок;
	Уведомление.Текст			   = ТекстСообщения;
	Уведомление.Данные 			   = Данные;
	Уведомление.ЗвуковоеОповещение = ЗвуковоеОповещение.ПоУмолчанию;
	Уведомление.Получатели.Добавить(Десериализовать(ПолучитьIDПодписчика()));
	ОтправкаДоставляемыхУведомлений.Отправить(Уведомление, КлючСервера);

Где Заголовок, ТекстСообщения, Данные, КлючСервера - это реквизиты формы, а функция ПолучитьIDПодписчика возвращает значение одноименной константы. 

Настало время первого теста. Запускаем приложение на МУ, блокируем экран или сворачиваем приложение, открываем в режиме Предприятие конфигурацию Сервер и жмем Отправить.

Сервер

Ура, МУ прожужжал/пропищал или что-то в этом роде, в общем, все получилось, сообщение доставлено.

Телефон

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

#Если МобильноеПриложениеКлиент Тогда
	ДоставляемыеУведомления.ПодключитьОбработчикУведомлений("Подключаемый_ОбработкаУведомления");
#КонецЕсли

Процедура Подключаемый_ОбработкаУведомления 

Процедура Подключаемый_ОбработкаУведомления(Уведомление, Локальное, Показано) Экспорт

	// просто сообщим тест пуша
	Сообщить(Уведомление.Текст);

КонецПроцедуры

Теперь после отправки сообщения с сервера можно выполнить любые действия на клиенте. В данном случае мы просто покажем текст сообщения.

Финал

Вместо заключения

Firebase это не только отправка push сообщений, но как мимнимум позволяет работать с рекламой в мобильных приложениях (с этим пока не разбирался), и, наверно еще много чего интересного, так что есть чем заниматься, господа!

p.s. в архиве 2 конфигурации - Сервер и Клиент, код которых на 90% изложен в этой публикации. 

FCM firebase cloud message push android мобильная платформа

См. также

"Штрихкод-информер" - мобильный ТСД и прайс-чекер в смартфоне

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

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

2880 руб.

03.12.2018    55679    166    102    

163

SALE! 25%

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

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

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

13200 9900 руб.

27.12.2021    34282    85    159    

180

"Мобильный ТСД" - инвентаризация и сбор штрихкодов для 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    92869    528    186    

300

Склад 15 ВЕЩЕВОЙ - автоматизация складов с маркированным товаром

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

Программное обеспечение для автоматизации складских операций со встроенными функциями работы с маркированной продукцией. Предназначено для автоматизации всех товароучетных операций на складах, обычных и адресного хранения. «Склад 15 ВЕЩЕВОЙ» объединил в себе несколько товарных групп маркированного товара (ОБУВЬ, ОДЕЖДА, ШИНЫ, ПАРФЮМ, БАДы, ЮВЕЛИРНЫЕ ИЗДЕЛИЯ), которые чаще всего встречаются в складской логистике вместе.

33550 руб.

02.06.2023    3109    2    0    

0

Магазин 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    3528    2    0    

4

Мобильная торговля для Android

Розничная торговля WEB-интеграция Мобильная разработка Мобильная платформа Управленческий учет Платные (руб)

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

4800 руб.

19.02.2008    42288    24    24    

40

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

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

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

1 стартмани

20.03.2024    1723    0    informa1555    1    

42
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
98. maksa2005 534 13.09.20 09:41 Сейчас в теме
(97)
оторый и

Приветствую. Раньше через GCM отправлял легко. Теперь он в ошибку уходит.
99. neo-ti 13.09.20 13:57 Сейчас в теме
(98)
оторый

Почитайте выводы и отталкивайтесь от режима разработки - возможно прийдётся что-то переписать... Или опишите суть проблемы, могу помочь выбрать нужный метод..
ps: к сожалению помочь без более подробной информации не представляется возможным.
100. maksa2005 534 13.09.20 18:01 Сейчас в теме
(99)Опиши свой метод которым сейчас пользуешься...
102. neo-ti 13.09.20 22:32 Сейчас в теме
(100)
Как и писал у меня сейчас проект в режиме разработки (запущен через мобильную платформу) -
Для разработки на Android - http запрос

Пока работает без нареканий и довольно шустро
104. maksa2005 534 14.09.20 11:00 Сейчас в теме
(102)Вот пример конфы.
ошибки валяться одна за другой.
firebase Ключ сервера и идентификатор получил...но не работает..
Если отправлять с сервака на приложение с использованием ИД, то ошибка:
Ошибка отправки PUSH. КодСостояние: 400
JSON_PARSING_ERROR: Unexpected character () at position 0.
Прикрепленные файлы:
1Cv8_push.cf
101. maksa2005 534 13.09.20 19:31 Сейчас в теме
(99)Вот как на зло про гуггл. больше полу года пользовался и вне запно перестал работать((( облом. Вот снова надо думать как отправлять уведомления.
108. user623969_dusa 14.09.20 11:48 Сейчас в теме
(101) внезапно)) предупреждали чуть ли не за два года что отключат GCM
124. dimasts 22 31.10.21 21:46 Сейчас в теме
(108) теперь и FCM отрубился. Где они предупреждают? Может там есть ответ почему?
103. m_kislyak 12 14.09.20 09:16 Сейчас в теме
(98)
на мобильной платформе 8.3.17 перестали приходить пуши, отправленные с помощью REST API. Ошибка "MismatchSenderId".
Похоже метод ПолучитьИдентификаторПодписчикаУведомлений() выдаёт некорректный идентификатор.
После отката на платформу 8.3.15 работает
105. maksa2005 534 14.09.20 11:02 Сейчас в теме
ты прав. надо попробовать...
Прикрепленные файлы:
109. user623969_dusa 14.09.20 11:50 Сейчас в теме
(105) а почему тип подписчика то GCM, смотрите внимательно, должен быть FCM

<DeliverableNotificationSubscriberID xmlns="http://v8.1c.ru/8.3/data/ext" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<subscriberType>FCM</subscriberType>
<deviceID>fJzOC2t</deviceID>
<applicationID>com.</applicationID>
<databaseID/>
</DeliverableNotificationSubscriberID>
110. maksa2005 534 14.09.20 12:08 Сейчас в теме
111. maksa2005 534 14.09.20 12:09 Сейчас в теме
(109)Ошибка отправки PUSH. КодСостояние: 400
JSON_PARSING_ERROR: Unexpected character () at position 0.
112. user623969_dusa 14.09.20 12:11 Сейчас в теме
(111) ну если верить английскому языку не правильный формат json запроса а вы в каком виде отправляете в виде xml
113. maksa2005 534 14.09.20 12:11 Сейчас в теме
114. maksa2005 534 14.09.20 12:18 Сейчас в теме
(112)
Прикрепленные файлы:
119. maksa2005 534 15.09.20 09:36 Сейчас в теме
(112)ошибка было в том что надо передавать не

ПараметрыСообщения.Вставить("to", Н);

а
ПараметрыСообщения.Вставить("registration_ids", Н);
133. dimasts 22 02.11.21 00:26 Сейчас в теме
(119) у меня на это отвечает
{
"error": {
"code": 400,
"message": "Invalid JSON payload received. Unknown name \"registration_ids\" at 'message': Cannot find field.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "message",
"description": "Invalid JSON payload received. Unknown name \"registration_ids\" at 'message': Cannot find field."
}
]
}
]
}
139. neo-ti 02.11.21 10:07 Сейчас в теме
(119) работает и то и другое, только параметры должны быть разные: для первого - строка идентификатор, для второго массив.
у меня так обыграно:

Если МассивУстройств.Количество() = 1 Тогда
	  	ПараметрыСообщения.Вставить("to", МассивУстройств[0]);  
	Иначе
	  	ПараметрыСообщения.Вставить("registration_ids", МассивУстройств);  
	КонецЕсли;
140. maksa2005 534 02.11.21 13:19 Сейчас в теме
(139) зачем это г* код
данные все равно в массив. хоть 1000 условий поставь
все равно одинаково будет выполняться код
141. neo-ti 02.11.21 17:53 Сейчас в теме
(140) замечание было в том что работают оба параметра и надо понимать с какими значениями их надо использовать.
А код приведен просто для примера
115. maksa2005 534 14.09.20 12:40 Сейчас в теме
(109)он сам генерирует GCM. Руками менял - толку нет
118. maksa2005 534 15.09.20 09:35 Сейчас в теме
(109)оказывается это менять не надо!!! работает и так. внизу комментарий
131. dimasts 22 02.11.21 00:10 Сейчас в теме
(105)метод на новых версиях не работаю, я ору об этом во всех форумах и на ютюбе :) Новые версии 1С генерируют неправильные токены, которые даже тестировщик гугл не приинимает, у которого вообще ни каких проблем нет с авторизацией и настройками, так как он автоматически всё подставляет
132. dimasts 22 02.11.21 00:22 Сейчас в теме
(105) сейчас проверил на платформе 8.3.15 такая же фигня
Код ответа:200
{"multicast_id":3530879489601614641,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]}
106. maksa2005 534 14.09.20 11:15 Сейчас в теме
(103)моб. платформа 8.3.16.130 тоже не работает!
107. maksa2005 534 14.09.20 11:20 Сейчас в теме
(103)mobile_8_3_15_86? и платформа 8.3.15.1489?
116. m_kislyak 12 14.09.20 16:57 Сейчас в теме
123. dimasts 22 31.10.21 21:45 Сейчас в теме
(97) Где можно почитать про то, что для разработки использовать, а что для конечного приложения? Правильно ли понимаю, что на мобильном клиенте FCM больше работать не будет? У меня целый год работали, а в конце сентября отрубились и теперь гугл мне говорит, что не тот отправлятель SENDER_ID_MISMATCH
129. neo-ti 01.11.21 09:03 Сейчас в теме
(123)
FCM больше рабо
не назову конкретного источника, было перелопачено в своё время масса статей в инете и протестированы различные способы на устройстве, результатом этого и стала выдержка, которую разместил в комментарий чтобы другие (и сам со временем) находили и отталкивались от описанного. Какой метод отправки вы используете на мобильном клиенте? http-запрос у меня работает без проблем на данный момент
134. dimasts 22 02.11.21 00:27 Сейчас в теме
(129) Понятно. Я использую все, представленные на этом сайте – у всех одна беда SENDER_ID_MISMATCH. Причём неависимо от версии андройда и девайса
138. neo-ti 02.11.21 10:04 Сейчас в теме
(134) А какое ПО работает на устройстве - "Мобильный клиент", "Мобильная платформа" или собранное приложение (apk-файл)?
142. dimasts 22 02.11.21 22:32 Сейчас в теме
117. maksa2005 534 15.09.20 09:28 Сейчас в теме
УРАА!!!!! ВОТ рабочий пример использования FCM.
Проверено на 8.3.16 моб версия


Процедура ОсновнойИнтерфейсДействие() Экспорт
	ЗаголовокСообщения = "Test message";
	ТекстСообщения = "4567";
	ДанныеСообщения = "123";

	КлючСервера = "_____________взять его с https://console.firebase.google.com______________;
	
	ИдентификаторПодписчикаXML = "________взять с мобильного приложения_____"

	
	FCMPushСервер.ОтправитьPUSH_Android(ИдентификаторПодписчикаXML, КлючСервера, ЗаголовокСообщения, ДанныеСообщения, ТекстСообщения);
КонецПроцедуры


Процедура ОтправитьPUSH_Android(ИдентификаторПодписчикаXML, КлючСервера, Заголовок, Данные, Текст) Экспорт
	Попытка
		
		ИдентификаторПодписчикаОбъект = ДесериализоватьXDTO(ИдентификаторПодписчикаXML);
		
		СоединениеHTTP = Новый HTTPСоединение("fcm.googleapis.com",443,,,,, Новый ЗащищенноеСоединениеOpenSSL(,));
		
		Заголовки = Новый Соответствие;
		Заголовки.Вставить("Authorization", "key=" + КлючСервера);
		Заголовки.Вставить("Content-Type", "application/json");
		
		АдресРесурса = "fcm/send";
		
		ЗапросHTTP = Новый HTTPЗапрос(АдресРесурса, Заголовки);
		
		ТелоСообщения = Новый Структура;
        ТелоСообщения.Вставить("title", Заголовок);
        ТелоСообщения.Вставить("data", Данные);        
        ТелоСообщения.Вставить("text", Текст);        
		
		
		
        ПараметрыСообщения = Новый Структура;
		
		Н =Новый Массив;
		Н.Добавить(ИдентификаторПодписчикаОбъект.ИдентификаторУстройства);
		
        ПараметрыСообщения.Вставить("registration_ids", Н);
        ПараметрыСообщения.Вставить("data", ТелоСообщения);
		
		СообщениеJSON = ЗаписатьДанныеВJSON(ПараметрыСообщения);
		Если СообщениеJSON = Неопределено Тогда
			Возврат;
		КонецЕсли; 
		
		ЗапросHTTP.УстановитьТелоИзСтроки(СообщениеJSON, "UTF-8",ИспользованиеByteOrderMark.НеИспользовать);
		Ответ = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);
		
		Если НЕ Ответ.КодСостояния = 200 Тогда
			Сообщить("Ошибка отправки PUSH. КодСостояние: "+Ответ.КодСостояния + Символы.ПС + Ответ.ПолучитьТелоКакСтроку());	
		Иначе
			Сообщить("Код ответа:"+Ответ.КодСостояния+ Символы.ПС + Ответ.ПолучитьТелоКакСтроку());
		КонецЕсли;
	Исключение
		Сообщить("Ошибка"+ОписаниеОшибки());
	КонецПопытки;
	
КонецПроцедуры
Показать
125. dimasts 22 31.10.21 22:00 Сейчас в теме
(117) нет это не рабочий говорит {"multicast_id":4732425899186897980,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]}"
Процедура ОтправитьPUSH_Android(ИдентификаторПодписчикаXML, КлючСервера, Заголовок, Данные, Текст) Экспорт
Попытка

ИдентификаторПодписчикаОбъект = ДесериализоватьXDTO(ИдентификаторПодписчикаXML);

СоединениеHTTP = Новый HTTPСоединение("fcm.googleapis.com",443,,,,, Новый ЗащищенноеСоединениеOpenSSL(,));

Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "key=" + КлючСервера);
Заголовки.Вставить("Content-Type", "application/json");

АдресРесурса = "fcm/send";

ЗапросHTTP = Новый HTTPЗапрос(АдресРесурса, Заголовки);

ТелоСообщения = Новый Структура;
ТелоСообщения.Вставить("title", Заголовок);
ТелоСообщения.Вставить("data", Данные);
ТелоСообщения.Вставить("text", Текст);



ПараметрыСообщения = Новый Структура;

Н =Новый Массив;
Н.Добавить(ИдентификаторПодписчикаОбъект.ИдентификаторУстройства);

ПараметрыСообщения.Вставить("registration_ids", Н);
ПараметрыСообщения.Вставить("data", ТелоСообщения);

СообщениеJSON = ЗаписатьДанныеВJSON(ПараметрыСообщения);
Если СообщениеJSON = Неопределено Тогда
Возврат;
КонецЕсли;

ЗапросHTTP.УстановитьТелоИзСтроки(СообщениеJSON, "UTF-8",ИспользованиеByteOrderMark.НеИспользовать);
Ответ = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);

Если НЕ Ответ.КодСостояния = 200 Тогда
Сообщить("Ошибка отправки PUSH. КодСостояние: "+Ответ.КодСостояния + Символы.ПС + Ответ.ПолучитьТелоКакСтроку());
Иначе
Сообщить("Код ответа:"+Ответ.КодСостояния+ Символы.ПС + Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
Исключение
Сообщить("Ошибка"+ОписаниеОшибки());
КонецПопытки;

КонецПроцедуры
Показать
127. maksa2005 534 01.11.21 04:39 Сейчас в теме
(125)у меня работает и сейчас
128. maksa2005 534 01.11.21 04:40 Сейчас в теме
(125)у вас ошибка в том что не верный получатель пуша
130. dimasts 22 02.11.21 00:06 Сейчас в теме
(128)Да, я об этом и говорю, что больше не будут отправляться уведомления FCM, потому что 1С Мобильная платформа генерирует некорректные токены, которые даже тестировщик запросов гугл не принимает
Короче если не хотите рисковать не обновляйте 1С, особенно до 8.3.19 – будут проблемы.
135. maksa2005 534 02.11.21 05:20 Сейчас в теме
(130)до 8.3.18 стабильно шлет)) выше не проверял.
120. user1509632 17.03.21 15:23 Сейчас в теме
(103)
так и не смогли отправить на 8.3.17?
У меня аналогичная ошибка на мобильном клиенте.
Нет никакой новой информации?
121. viki_glebova 17.09.21 16:51 Сейчас в теме
Просто какая-то жесть с этими оповещениями. Кто-то пишет, что все получилось, кто-то пишет что ничего не получилось. Уже испробовала все варианты. Уведомление так ни разу и не пришло. Разные платформы в том числе и мобильные. Все равно все тихо. Есть у кого-нибудь реально рабочий пример на данный момент как это все работает?
122. user623969_dusa 20.09.21 09:23 Сейчас в теме
(121) вам пример не поможет если вы не разобрались как делать. Находите инструкцию и все по шагам. На память: регистрируете проект, получаете ключ для передачи уведомлений - длинная строка раньше было 32 символа, сейчас больше. На мобильном получаете ид подписчика, передаете на сервер. С сервера уже можно отправлять уведомления, используя ид подписчика и ключ. Те кто последовательно правильно выполнил шаги у тех работает. Конечно у многих не работает, разобраться в этом с наскока сложно.
126. dimasts 22 31.10.21 22:04 Сейчас в теме
(122)Я разобрался в этом несколько лет назад, и когда перешел на FCM целый год всё работало теперь говорит {"multicast_id":4732425899186897980,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]}"
Даже тестировщик запросов гугла в справке по методу send говорит, что моюильный клиент 1С генерирует неверные токены.
Так, что это в 1С, что-то поменялось. Теперь не будут походу больше FCM уведомления работать.
137. maksa2005 534 02.11.21 05:22 Сейчас в теме
(126)кроме fcm табильнее и дешевле нету. Делайте через 1с cloud и платите им🤣
143. dimasts 22 02.11.21 22:35 Сейчас в теме
(137) а есть возможность токен проверить вот на етой странице?
Может она 1Совские токены посылает нафиг с формулировкой "MismatchSenderId"?
144. maksa2005 534 03.11.21 06:19 Сейчас в теме
145. dimasts 22 03.11.21 14:24 Сейчас в теме
(144) У меня токены копятся в регистре сведений и обновляются при каждом запуске на всякий случай. А на это странице справа должно открыться окно с тестером запросов, там надо ввести в поле projects/НАЗВАНИЕ_ПРОЕКТА, в запросе заполнить поля validationOnly: true Messege:[token:"ТОКЕН АНДРОЙД УСТРОЙСТВА"]
136. maksa2005 534 02.11.21 05:21 Сейчас в теме
(122)давно еще разрбрался и работает на 8.3.16 до 8.3.18.
146. dimasts 22 06.11.21 13:59 Сейчас в теме
Полностью переустановил сервер. Понизил версию до 8.3.18. Для верности попробовал повторить пример из статьи.
Пишет:
Отправка сообщения 1 через FCM завершилась ошибкой: ключ отправителя не подходит для получателя
147. dimasts 22 06.11.21 14:05 Сейчас в теме
Друзья, пришлите мне кто нибудь пуш, иначе у меня крыша поедет.
Я ТРИ НЕДЕЛИ уже копаюсь в это галиматье не работает и всё СОБАКА!!!! Целый год всё работало. Не пойму в чём дело.
Вот мой ИДПодписчика в сериализованном виде

<DeliverableNotificationSubscriberID xmlns="http://v8.1c.ru/8.3/data/ext" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><subscriberType>FCM</subscriberType><deviceID>dUH4­CloE9G4:APA91bF2kUARARx6idfwbiWaw2bYZ1YQR4DfoBZVBFJD2hLr_vp_aCicGOMQ­GppGnXSsKTQhz2ZL4qR-RGT4c2Ymy-rYvCs8vZLCUvujdPWwwXNWz6jTz4XYwW08EX8ZDwANlzjOlnly</deviceID­><applicationID>com.e1c.mobile.standalone</applicationID><databaseID>02df41c6-3fd8-3a1a-bbc7-b9b3931e7c93</databaseID></DeliverableNotificationSubscriber­ID>
151. dimasts 22 30.06.22 13:33 Сейчас в теме
У кого-нибудь работает это на Мобильном Клиенте в 2022 году?
153. pioner111 1 20.11.22 12:44 Сейчас в теме
(151)
У кого-нибудь работает это на Мобильном Клиенте в 2022 году?


Доброго дня. Может удалось что нибудь выяснить ?
152. pitnn 06.07.22 12:14 Сейчас в теме
Добрый день, Коллеги.
А отправка уведомлений возможна на сторонние (НЕ 1С-ные мобильные приложения)?
154. dimasts 22 21.11.22 17:06 Сейчас в теме
(152) если это ваше приложение и вы можете сформировать и отправить ИД получателя из этого приложения в 1С, то, думаю, вполне возможно. Ещё надо, возможно, потребуется полное наименование приложения андройд типа "com.e1c.mobile.E1cApplication", чтобы зарегистрировать его в гугле под своим именем.
155. pioner111 1 22.11.22 19:14 Сейчас в теме
(154) Добрый день. Получилось у вас отправить PUSH на мобильный клиент ... если да ... поделитесь пожалуйста информацией как вы это сделали ... кажется всё перепробовал ... никак не получается
156. dimasts 22 22.11.22 22:21 Сейчас в теме
(155) Халява закончилась. Это не возможно сделать. Этот метод теперь не работает для мобильного клиента. Надо собирать Мобильное приложение и пихать в него json, скачанный из консоли google.
157. Sanfany 11.08.23 14:44 Сейчас в теме
Оставьте свое сообщение