Notification — различия между версиями

Материал из wiki.appsalutecreator.com
Перейти к: навигация, поиск
(Структура сообщений)
(Отправка и получение сообщения приложением)
Строка 157: Строка 157:
 
При получении приложением сообщения, если заполнено тело пуша (хотя бы параметры eventName и eventMessage), будет показано пуш-уведомление. Если при этом приложение работало в фоне - все дополнительные параметры будут переданы в приложение при его запуске. Если оно уже было запущено - все параметры немедленно будут обработаны.
 
При получении приложением сообщения, если заполнено тело пуша (хотя бы параметры eventName и eventMessage), будет показано пуш-уведомление. Если при этом приложение работало в фоне - все дополнительные параметры будут переданы в приложение при его запуске. Если оно уже было запущено - все параметры немедленно будут обработаны.
  
Все доп. параметры сообщения
+
Все доп. параметры сообщения будут сохранены в опции:
 +
 
 +
[[Файл:Notification_bundle_struct.png]]
  
 
===Обработка в редакторе===
 
===Обработка в редакторе===

Версия 09:29, 13 ноября 2018

Объект Notification предназначен для показа push уведомлений на IOS устройствах.

Параметры объекта

Основные параметры

  • имя события (name) - Имя события. Если у двух событий одинаковые имена - сохранится первое. Не обязательный параметр. Перетягивается из редактора текстов. Поле должно быть в состоянии редактирования.
  • сообщение (message) - Основной текст события. Перетягивается из редактора текстов. Поле должно быть в состоянии редактирования.
  • большая картинка (big_picture) - Имя файла с большой картинкой. Должен лежать не в ресурсах, а рядом с app.icf. Поле затирается после регистрации уведомления
  • год (year) - Год, когда сработает оповещение. Минимальное значение - 1971 .
  • месяц (month) - Месяц, когда сработает оповещение. Минимальное значение - 0, максимальное - 11 .
  • день (day) - День, когда сработает оповещение. Минимальное значение - 1, максимальное - 31 .
  • час (hour) - Час, когда сработает оповещение. Минимальное значение - 0, максимальное - 23 .
  • минута (min) - Минута, когда сработает оповещение. Минимальное значение - 0, максимальное - 59 .
  • секунда (sec) - Секунда, когда сработает оповещение. Минимальное значение - 0, максимальное - 59 .
  • задержка (delay) - Задержка от текущего времени до оповещения. Если задана не -1 - то используется вместо даты.
  • перед первым init экстеншена (delayInit) - Задержка в секундах до первой инициализации расширения
  • цвет заголовка (colorTitle) - Цвет заголовка - только для кастомных нотификейшенов
  • цвет текста (colorText) - Цвет текста - только для кастомных нотификейшенов

Firebase Cloud Messaging

  • Обработчик бандлов (fcmBundleHandler) - Объект, в который будут записаны параметры бандла и который будет переведен в состояние eventID бандла при fcm_check_bundle (см. дальше)

Состояния объекта

  • set - устанавливает нотификацию в очередь
  • clear - очищает очередь нотификации
  • erase - очищает очередь нотификации от уведомления с указаннным ID темы и ID сообщения
  • fcm_subscribe_topic - Firebase only! Подписаться на топик из поля topic
  • fcm_unsubscribe_topic - Firebase only! Отписаться от топика из поля topic
  • fcm_check_bundle - Firebase only! Проверить наличие fcm бандлов

Установка уведомлений (объект notification):

Состояние
"set", - оба способа
"set_native", - устройство
"set_parse", - парс
или через параметр
<property name="отсылать в" type="enum" value="0" id="send" hint="отсылать в" regexp="обе службы=0,только локальный пуш=1,только парс=2" /> (тогда состояние set)

Пример применения

Пусть через 5 минут после нажатия на кнопку у пользователя появиится уведомление с текстом "message of notification".

Для этого разместим на сцене объект notification и установим ему следующие параметры:

  • задержка - 300

Notification 01.jpg


В текстовую базу занесём новые записи с названием события нотификации и текстом нотификации.

Далее добавим на сцену кнопку, которая будет передавать параметры объекту "notification" и переводить объект "notification" в состояние "set".

Notification 02.jpg

Теперь при нажатии на кнопку в очередь будет поставлено извещение, которое покажет система через 5 минут. На устройстве это выглядит так:

IMG 0043.PNG
IMG 0046.PNG


Информация в логах

I/GNotification GNotification::aviable() GNotification::aviable() - уведомления разрешены
I/GNotification GNotification::state() state(ST_CLEAR) clear all notifications - очистилась
вся очередь уведомлений
I/GNotification GNotification::state() state(ST_SET) - уведомление поставлено в очередь
I/GNotification GNotification::EraseNotification() EraseNotification erase notification title: - уведомление
удалено из очереди

Примечания

В обычном случае по нажатию на сообщение открывается приложение на экране котором были, или на изначальном экране в зависимости от настроек. У объекта options можно задать параметр notifScrID (значение параметра - id экрана). Если параметр задан, то при открытии приложения из уведомления откроется выбранный экран.

Firebase Cloud Messaging

Firebase Cloud Messaging позволяет рассылать кастомные уведомления с определенным набором доп. параметров, которые в последствии будут переданы во вьювер и сохранены в опциях (fcm бандлы).

Подготовка проекта

1. Создайте и настройте проект в Firebase консоли (Link)
2. Скачайте из консоли файл конфигураций проекта google-services.json
3. Перенесите параметры из google-services.json в project\conf\pom\sdl\google_params.json в поле extra_strings
   google_app_id                       >>          {YOUR_CLIENT}/client_info/mobilesdk_app_id
   gcm_defaultSenderId                 >>          project_info/project_number
   default_web_client_id               >>          {YOUR_CLIENT}/oauth_client/client_id (client_type == 3)
   ga_trackingId                       >>          {YOUR_CLIENT}/services/analytics-service/analytics_property/tracking_id
   firebase_database_url               >>          project_info/firebase_url
   google_api_key                      >>          {YOUR_CLIENT}/api_key/current_key
   google_crash_reporting_api_key      >>          {YOUR_CLIENT}/api_key/current_key
   project_id                          >>          project_info/project_id
   google_storage_bucket               >>          project_info/storage_bucket
4. В app.icf сборки добавить раздел [Firebase], дабы при сборке подтянулся нужный экстеншн.

Структура сообщений

Сообщения firebase имеют два основных блока:

  • notification - стандартный пуш, содержит заголовок и текст сообщения;
  • data payload - содержит произвольный набор параметров ключ-зачение (с ограничением 4Кб в firebase и 50 штук в наших реалиях)

Сообщение может содержать либо один из этих блоков, либо оба сразу.

При наличии в сообщении блока notification оно автоматически трактуется системой как пуш и при получении такого на устройстве - сразу закидывает его в системный трей (т.е. без нашей обработки). Мы никак не властны над подобными сообщениями и их параметрами (с параметрами то отдельная тема), а значит никаких кастомизаций в виде цветного шрифта и/или картинки не будет.

Если сообщение имеет только data payload - оно всецело обрабатывается нашим движком, а значит мы имеем полный контроль над его отображением и всеми его параметрами. Но такие сообщения невозможно отправить из firebase консоли (т.к. там всегда должен присутствовать текст пуша), только скриптом (либо из нашей одминки).

Для корректной работы всегда нужно использовать только data payload со структурой:

Тело пуша:                              # блок параметров, необходимых для отображения пуша
 "eventName"          : "EVENT_TITLE",   # заголовок сообщения,  ОБЯЗАТЕЛЬНО для отображения пуша
 "eventMessage"       : "EVENT_BODY",    # текст сообщения,      ОБЯЗАТЕЛЬНО для отображения пуша
 "eventType"          : "1",             # 0 - показать только заголовок и сообщение; 1 - показать красивое сообщение со всеми плюшками
 "eventPriority"      : "2"              # приоритет пуша [-2:2], по дефолту 2
 "eventTime"          : "1541507205"     # время запуска пуша в UTC секундах (если отсутствует или меньше текущего времени - сразу показать)
 "evetBigPicture"     : "https://apps.absolutist.com/images/profile/no_avatar.png",   # бекграунд пуша - НЕ имя ресурса, НЕ id ресурса, ТОЛЬКО ссылка
 "eventTitleColor"    : "#FF0000FF",     # ARGB цвет заголовка
 "eventTextColor"     : "#FFFF0000",     # ARGB цвет текста
Тело данных
 "eventID"            : "EVENT_ID",     # id ивента, машинка-обработчик будет переведена в это состояние (это обязательное поле, если хотите как-то обработать пуш в приложении)
 Далее может быть произвольный набор параметров-значений, которые будут переданы в машинку-обработчик

Отправка и получение сообщения приложением

(Далее речь идет только про data payload)

Отправлять сообщения пользователям можно несколькими способами:

  • всем пользователям (вообще всем)
  • избирательно по каким-либо критериям/параметрам пользователя: уровень, категория (платящий/неплатящий), язык, регион, возраст и т.п.
  • рассылка по топикам (для получения такой рассылки пользователь должен быть подписан на соответствующий топик)

Приложение получает сообщения только если оно запущено или работает в фоне (т.е. мы его не убили в диспетчере задач / настройках).

При получении приложением сообщения, если заполнено тело пуша (хотя бы параметры eventName и eventMessage), будет показано пуш-уведомление. Если при этом приложение работало в фоне - все дополнительные параметры будут переданы в приложение при его запуске. Если оно уже было запущено - все параметры немедленно будут обработаны.

Все доп. параметры сообщения будут сохранены в опции:

Notification bundle struct.png

Обработка в редакторе

0. Определиться, какие евенты вы хотите обрабатывать (поле eventID в пуше) и с какими параметрами (эт важно!)
1. Создать объект Notifications, т.к. вся коммуникация идет через него
2. Создать машинку-обработчик и указать её в поле Обработчик бандлов (fcmBundleHandler) объекта Notifications
3. Создать машинку, которая будет раз в определенный период дёргать Notifications в состояние fcm_check_bundle
4.0. В состоянии fcm_check_bundle объект Notifications проверяет опции на наличие бандлов из firebase сообщений.

Если бандл имеется - Notifications переводит машинку fcmBundleHandler в состояние из параметра eventID бандла. TODO


Отправка сообщений

todo

Пример

Download