Уведомления в мобильном приложении

1. viki_glebova 22.07.21 19:33 Сейчас в теме
Добрый день. Подскажите, пожалуйста, примером. Можно ли как то реализовать уведомление на мобильном телефоне, когда приложение закрыто?

Судя по статье https://wonderland.v8.1c.ru/blog/push-i-lokalnye-uvedomleniya/
можно, но пример не особо понятный.

Пока используется мобильная платформа 8.3.18.77

В последствии планируется скомпилировать свое приложение.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. van_za 246 22.07.21 20:34 Сейчас в теме
Если мобильное приложение работает в фоновом режиме (неактивно) или вообще не исполняется (выгружено из памяти), то уведомление отображается операционной системой. При этом используется звуковое оповещение и наклейка. В iOS наклейка будет установлена у иконки мобильного приложения на домашнем экране, а в Android она задаёт число, которое будет отображено в сообщении на панели уведомлений. После того, как пользователь нажмёт на уведомление, будет активизировано (или запущено) мобильное приложение, и будет выполнен (если он подключён) обработчик уведомлений.
https://wonderland.v8.1c.ru/blog/push-i-lokalnye-uvedomleniya/
3. viki_glebova 22.07.21 21:49 Сейчас в теме
(2)Спасибо большое за ответ. Это написано в этой статье. Это все я читала. Не работают оповещения. Как протестировать работу подобных оповещений? На сколько понятно из описания, то мне как раз нужны локальные оповещения. Взаимодействия с центральной базой не нужно. Нужно, чтобы было оповещение о определенном событии в определенное время, конечно же при закрытом приложении. Как подобное реализовать?
4. van_za 246 22.07.21 23:22 Сейчас в теме
извиняюсь все таки, какой сценарий использования?
5. viki_glebova 23.07.21 06:42 Сейчас в теме
(4)не совсем понятно, что такое сценарий использования. Можете чуть подробнее?

P.S. С терминологией мобильной разработки только знакомлюсь.
6. Vlan 36 23.07.21 07:32 Сейчас в теме
В статье время срабатывания устанавливается через
ДатаПоявленияUTC
В синтакс-помощнике свойство выглядит так:
ДатаПоявленияУниверсальноеВремя
Может поэтому не выводится?
7. viki_glebova 23.07.21 08:08 Сейчас в теме
(6) Устанавливала это свойство сразу же.

Если так, то сообщение не появляется вообще. Если убрать ДатаПоявленияУниверсальноеВремя то сообщение появляется при запуске системы. По сути не работает как надо.

Процедура ПриНачалеРаботыСистемы()
		
	#Если МобильноеПриложениеКлиент Тогда
		Уведомление = Новый ДоставляемоеУведомление;
		Уведомление.Заголовок = "К сожалению, Вы не получите помидор.";
		Уведомление.Текст = "К сожалению, Вы не получите помидор.";
		Уведомление.ДатаПоявленияУниверсальноеВремя = Дата("20210723090600");
		Уведомление.ЗвуковоеОповещение = ЗвуковоеОповещение.ПоУмолчанию;
		//Уведомление.ИнтервалПовтора = 60;
		ДоставляемыеУведомления.ДобавитьЛокальноеУведомление(Уведомление);
		ДоставляемыеУведомления.ПодключитьОбработчикУведомлений("ПриПолученииУведомления");
	#КонецЕсли
	
	
КонецПроцедуры

Процедура ПриПолученииУведомления(Уведомление, Локально, Показано) Экспорт
	
	Если Локально Тогда
		Сообщить("Прибыло уведомление с текстом: " + Уведомление.Текст);
	Иначе
		Сообщить("Прибыло Push-уведомление с текстом: " + Уведомление.Текст);
	КонецЕсли;
	
КонецПроцедуры

Показать
8. Vlan 36 23.07.21 08:15 Сейчас в теме
(7) А вы учитываете, что используется УниверсальноеВремя? То есть UTC-0
Попробуйте
Уведомление.ДатаПоявленияУниверсальноеВремя = УниверсальноеВремя(Дата("20210723090600"));
10. viki_glebova 23.07.21 21:16 Сейчас в теме
(8)
Уведомление.ДатаПоявленияУниверсальноеВремя = УниверсальноеВремя(Дата("20210723090600"));


Добрый день. Очень все это странно. Вчера тестила с этим кодом, что выше. И сегодня весь день в хаотичном порядке приходят уведомления. Это конечно круто, что все же работает как мне надо. Но вот только до сих пор не ясно как этим управлять. Если просмотреть
УниверсальноеВремя(ТекущаяДата())

То там время вообще отличается на 4 часа. Причем минус. Т.е. у меня 22:00:00, а универсальное показывает 18:00:00.

Меняла часовой пояс на сервере. Бесполезно, результат тот же.

Если кто-то знает в чем кроется причина, подскажите пожалуйста.
11. Vlan 36 24.07.21 06:44 Сейчас в теме
(10) Все верно. Универсальное время и будет отличаться. В мобильном устройстве все даты хранятся в универсальном формате. А выводятся уже в местном времени, согласно часового пояса, выставленного в Настройках. У вас пояс Казани, значит +4 часа.
12. viki_glebova 24.07.21 07:21 Сейчас в теме
(11) Хорошо, это понятно. Спасибо. Почему уведомления тогда не выводятся?
14. Vlan 36 26.07.21 07:23 Сейчас в теме
(12) Вы уж определитесь: выводится, не выводится, выводится не во время?
Сегодня планшет с андроидом захватил, попробую поэкспериментировать.
15. viki_glebova 26.07.21 07:27 Сейчас в теме
(14)Ну я вроде бы по-русски пишу. Логика не понятна.

Вы не поверите, но лично на моей разработке сообщения то выводятся, то не выводятся. Если бы была понятна логика этого, я бы не создавала тему и не спрашивала.

Тестировала в прошлый раз, на след день мой телефон меня усыпал уведомлениями. Потом начала тестировать, телефон молчит до сих пор. На след день вывел одно уведомление и все. Как тут можно понять это? Описания нормального нет. А по тому что песть, типа все должно работать, но не работает.

В плане универсального времени вы хоть немного открыли истину. Об этом нигде не написано. Но все же уведомления не выводятся.

Буду очень признательна, если поможете разобраться с этим.
16. Vlan 36 26.07.21 08:13 Сейчас в теме
(15) Ну вот сейчас задал дату
УниверсальноеВремя(Дата("20210726090800"))
У меня тоже часовой пояс +4.
Сообщение вывелось. Насколько я понял, телефон не должен быть в спящем режиме
17. viki_glebova 26.07.21 08:46 Сейчас в теме
(16)Хм. Можете привести полный ваш код и скажите, пожалуйста, как спровоцировали выполнение этого кода? На кнопку повесили или как? Какие инструкции препроцессору употребляли? Как у вас сообщение вышло? И что значит спящий режим? У меня просто заблокирован телефон. С любого мессенджера приходят уведомления и отсюда приходили когда тестировала раньше. Вы поставили 8 утра, а во сколько выполнили код? Т.е. как настало 8 утра, у вас появилось уведомление?
18. Vlan 36 26.07.21 08:52 Сейчас в теме
(17)
#Если МобильноеПриложениеКлиент Тогда	
		Уведомление = Новый ДоставляемоеУведомление; 
		Уведомление.Заголовок = "1С:Кулинарные рецепты"; 
		Уведомление.Текст = "Выбери рецепт дня: " + ПолучитьРецептДня(); 
		Уведомление.Данные = "Жду новый рецепт"; 
		Уведомление.ДатаПоявленияУниверсальноеВремя = УниверсальноеВремя(Дата("20210726090800"));
		//Уведомление.ИнтервалПовтора = 900; 
		Уведомление.ЗвуковоеОповещение = ЗвуковоеОповещение.ПоУмолчанию; 
		Уведомление.Наклейка = 1; 
		ДоставляемыеУведомления.ДобавитьЛокальноеУведомление(Уведомление);		
	#КонецЕсли	
Показать

Это с курсов пробный пример. Процедура на кнопке. Время было выставлено на 09-08. В заблокированном состоянии оповещения не было, а только разблокировал, сразу бзнынькнуло. Еще попробую для чистоты эксперимента.
Да! Мобильная платформа 8.3.18.41, если это важно. На новых платформах жаловались, что какие-то мобильные функции работают по-другому (если вообще работают).
19. Vlan 36 26.07.21 09:20 Сейчас в теме
(18) Повторное пришло и в заблокированном состоянии. Но с опозданием на 6 минут.
9. maksa2005 534 23.07.21 14:44 Сейчас в теме
делайте через пуш уведомление. я так реализовал для iOS и андрюши)
serg33rus; +1 Ответить
13. viki_glebova 24.07.21 07:32 Сейчас в теме
(9)На сколько понятно, ПУШ это если нужно с сервера послать оповещение. Мне этого не нужно. Мне нужно оповестить пользователя о наступлении локального события. На каждом мобильном устройстве оно может быть свое.
20. Xershi 1484 01.08.21 08:27 Сейчас в теме
(13) если вам нужна точность то только пуш. Иначе вам уже дали код.
viki_glebova; +1 Ответить
21. viki_glebova 13.09.21 11:26 Сейчас в теме
(20)Добрый день. Наконец-то дошла до этого проекта. Есть статья на ИТС где, в принципе, все подробно расписано. https://its.1c.ru/db/pubintromobile#content:141:hdoc

Но там предлагается в качестве сервера использовать сервер от 1С. А 1с я что-то не доверяю.))))
Я так понимаю сервис GCM более не доступен.

Вместе него нужно использовать этот?
https://firebase.google.com/docs/cloud-messaging/

Может есть где то актуальная инструкция по настройке push-уведомлений в 1с?
23. maksa2005 534 13.09.21 12:10 Сейчас в теме
(21)
Доступен. По сей день использую
24. viki_glebova 13.09.21 12:11 Сейчас в теме
(23)Тогда небольшой тупняк по настройке этого всего. Можете пример дать? Как вы у себя реализовали это?
26. o4karek 15.09.21 09:24 Сейчас в теме
(21)
Может есть где то актуальная инструкция по настройке push-уведомлений в 1с?

Вот: https://its.1c.ru/db/v8319doc#bookmark:dev:TI000001540

(21)
Но там предлагается в качестве сервера использовать сервер от 1С.

Пуши все равно отправляются через штатный сервис используемой платформы. Сайт 1с выступает в качестве посредника и сам ничего не рассылает
22. viki_glebova 13.09.21 11:31 Сейчас в теме
(9)Можете дать пример для Андройда?
25. maksa2005 534 14.09.21 19:59 Сейчас в теме
(22)
вот
КлючСервера = "AAAAYv55EtM:APA91_______________SgQMvyHVbhiXeEn603--5T3WXRmW4xyE4c1456hfHZS6wNZLf_________________________";
	
	Попытка
		
		Соединение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 уведомления",УровеньЖурналаРегистрации.Ошибка,,,"Ошибка отправки PUSH. КодСостояние: "+Ответ.КодСостояния + Символы.ПС + Ответ.ПолучитьТелоКакСтроку());
		КонецЕсли;
	Исключение
		ЗаписьЖурналаРегистрации("Ошибка отправки push уведомления",УровеньЖурналаРегистрации.Ошибка,,,"Ошибка отправки PUSH. "+ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
	КонецПопытки;
	
Показать
27. viki_glebova 15.09.21 20:28 Сейчас в теме
(25) Это, видимо, код из отправки из основного приложения?

А переменная МассивИдентификаторПодписчика как идентифицируется?

И какой код в мобильном приложении писать?
28. maksa2005 534 15.09.21 21:50 Сейчас в теме
(27)из сервера. мобильное приложение не отправляет (по крайней мере у меня). у меня весь процесс обработки идет на стороне сервера.
МассивИдентификаторПодписчика - Это массив идентификаторов кому надо отправить пуши

Процедура ОсновнойИнтерфейсДействие() Экспорт
	ЗаголовокСообщения 	= "Начислены бонусы (тест)";
	ТекстСообщения 		= "Вам начислены бонусы 325руб. Покупка на 3250руб.";
	
	Н = Новый Структура;
	Н.Вставить("Date","12312123");
	ДанныеСообщения 	= Н;

	ИдентификаторПодписчика = Справочники.ИнформационныеКарты.НайтиПоНаименованию("000 001").ИдентификаторПодписчика;
	
	Н = Новый Массив;
	Н.Добавить(ИдентификаторПодписчика);
		
	ОтправитьPUSH_Android(Н, ЗаголовокСообщения, ДанныеСообщения, ТекстСообщения);
КонецПроцедуры
Показать


как получить идентификатор?
в мобильном приложении на клиенте:
#Если МобильныйКлиент ИЛИ МобильноеПриложениеКлиент ТОгда
		ИдентификаторПодписчика = ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений("____цифр из сайта fcm____");
		ИдентификаторУстройства = ИдентификаторПодписчика.ИдентификаторУстройства;
	#КонецЕсли
30. viki_glebova 16.09.21 19:49 Сейчас в теме
(28) С записью в JSON разобралась. С помощью вашего кода ошибок при отправке нет, но и оповещения никакие не приходят. Можно вас попросить чуть подробнее рассказать как вы реализовали у себя уведомления на телефоне?

На мобильном клиенте в процедуре ПриНачалеРаботыСистемы
	#Если МобильноеПриложениеКлиент Тогда
		Попытка
			НомерПриложенияGoogleCloud = ОбменДанными.ПолучитьНомерПриложенияGoogleCloud();
			ИдентификаторПодписчикаУведомлений = ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений(НомерПриложенияGoogleCloud);
			ИдентификаторУстройства = ИдентификаторПодписчикаУведомлений.ИдентификаторУстройства;
			
			ОбменДанными.ПередатьИдентификаторПодписчикаУведомлений(ИдентификаторПодписчикаУведомлений);
		Исключение
		КонецПопытки
	#КонецЕсли
Показать


НомерПриложенияGoogleCloud - 797785657074
Затем ИдентификаторУстройства передается в основное приложение.

В основном приложении код отправки ка у вас выше.
КлючСервера формате bF204hB2CYAhENo-BRXLBDzCYkOT2xu_g7reFIW037g2mZtJRQGicYMEwHVPVR-lKYNuO7r8QJEqcBXkpr41Gho1tRHEWPtWLcY-Vzp

Ошибок при отправке нет, уведомление не приходит.

Что делаю не так?

В консоле в настройках https://console.firebase.google.com/

на закладке обмен сообщениями в облаке эти данные. Может еще что то надо добавить?
Прикрепленные файлы:
31. maksa2005 534 17.09.21 04:45 Сейчас в теме
(30)чтобы отправить уведомдение. Получите на клиенте приложения по вашему id 7977...идентификатор устройства. Когда его получите, поместите в js и передайте его на отправку. Так же не забутьте дать разрешение в приложении на получение уведомлений пуш
32. viki_glebova 17.09.21 06:53 Сейчас в теме
(31)Делаю все ровно точно также как Вы сейчас описали. В мобильном приложении получаю идентификатор устройства, передаю его в основное. Затем в основном вашим кодом запихиваю в json и отправляю. Код ответа приходит 200. Но... Оповещений нет.


Может в консоле firebase что-то еще нужно делать? А то что как-то легко прошла настройка. Точнее сказать ее практически и не было. Тупо создала проект и в настройках появились все эти данные.
33. maksa2005 534 17.09.21 07:06 Сейчас в теме
(32)
если 200 - ушло. можете проверить отправив пуш через консоль FCM
В fcm ничего не надо. он прост в использовании в отличии от яблока (гемора дофига).
34. viki_glebova 17.09.21 07:11 Сейчас в теме
(33) Ну не смотря на это уведомлений нет. Коль уж все правильно. Как отправить сообщение через консоль?
35. viki_glebova 17.09.21 07:16 Сейчас в теме
(33)Если так, то ничего не приходит.

Идентификатор устройства туда вставляю, который получаю этим кодом
#Если МобильноеПриложениеКлиент Тогда
        Попытка
            НомерПриложенияGoogleCloud = ОбменДанными.ПолучитьНомерПриложенияGoogleCloud();
            ИдентификаторПодписчикаУведомлений = ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений(НомерПриложенияGoogleCloud);
            ИдентификаторУстройства = ИдентификаторПодписчикаУведомлений.ИдентификаторУстройства;
        Исключение
        КонецПопытки
    #КонецЕсли
Прикрепленные файлы:
38. maksa2005 534 17.09.21 07:39 Сейчас в теме
(35)да вижу что ушло. приходит моментально
39. viki_glebova 17.09.21 13:37 Сейчас в теме
(38)Это я сама добавила вручную в консоле. Ничего не пришло. Как у вас настроены, что у вас все приходит?
40. viki_glebova 17.09.21 15:18 Сейчас в теме
(38)Сейчас еще раз проверила код. Что передается с мобильного устройства в основное приложение. Туда передаю полностью идентификаторПодписчикаДоставляемыхУведомлений. Храню его в хранилище значений в основной базе. Ошибок при отправке нет. Уведомлений также нет.
Люди добрые, подскажите, пожалуйста, кто с этим разбирался. Как реализовать уведомления на андройде?
Прикрепленные файлы:
41. maksa2005 534 17.09.21 15:19 Сейчас в теме
(40)
й базе. О

тут дело не в коде. он работает по сей день в приложениях.
тут дело в вашей платформе. у меня стоит 8.3.16
мобильная 8.3.18
проверяйте там.
43. пользователь 17.09.21 15:49
Сообщение было скрыто модератором.
...
44. viki_glebova 17.09.21 15:54 Сейчас в теме
(41) судя по этой статье https://infostart.ru/1c/articles/606748/
брать ключ надо все же из другого места. И выглядит он иначе. У вас какой ключ используется? Где его получили?

Если взять из консоли разработчика гугл, то вот такая ошибка.


Ошибка отправки PUSH. КодСостояние: 401
<HT ML>
<HEAD>
<TITLE>INVALID_KEY_TYPE</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>INVALID_KEY_TYPE</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
45. maksa2005 534 22.09.21 20:04 Сейчас в теме
(44) какой ключ? ключ fcm на сайте. у меня и всех клиентом по сей день работает
36. viki_glebova 17.09.21 07:19 Сейчас в теме
(33)Я использую опубликованное мобильное приложение. Через мобильную платформу подключаюсь к мобильному приложению. Если это имеет значение. МОжет нужно приложение полноценное компилировать? И в него добавлять что-то?
37. maksa2005 534 17.09.21 07:39 Сейчас в теме
(36) не важно где вы его запускаете. в noxе или на самом телефоне под клиентом. работать будет везде
42. пользователь 17.09.21 15:20
Сообщение было скрыто модератором.
...
29. viki_glebova 16.09.21 17:40 Сейчас в теме
(25) Можете вашу функцию показать? ЗаписатьДанныеВJSON
46. KHoroshulinAV 171 20.04.23 18:17 Сейчас в теме
Коллеги можно отправлять уведомления в мобильном приложении. И другие данные и даже отчёты Дзен MIE
или публикация инфостарт Инфостарт MIE
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот