Notification — различия между версиями
Bmor (обсуждение | вклад) (→Подготовка проекта) |
Bmor (обсуждение | вклад) (→Обработка в редактора) |
||
Строка 119: | Строка 119: | ||
: 4. В app.icf сборки добавить раздел '''[Firebase]''', дабы при сборке подтянулся нужный экстеншн. | : 4. В app.icf сборки добавить раздел '''[Firebase]''', дабы при сборке подтянулся нужный экстеншн. | ||
− | ===Обработка в | + | ===Обработка в редакторе=== |
− | + | : 0. Определиться, какие евенты вы хотите обрабатывать (поле '''eventID''' в пуше) и с какими параметрами ('''эт важно!''') | |
+ | : 1. Создать объект '''Notifications''', т.к. вся коммуникация идет через него | ||
+ | : 2. Создать машинку-обработчик и указать её в поле ''Обработчик бандлов (fcmBundleHandler)'' объекта '''Notifications''' | ||
+ | : 3. Создать машинку, которая будет раз в определенный период дёргать '''Notifications''' в состояние '''fcm_check_bundle''' | ||
+ | : 4.0. В состоянии ''fcm_check_bundle'' объект '''Notifications''' проверяет опции на наличие бандлов из firebase сообщений. | ||
+ | Если бандл имеется - '''Notifications''' переводит машинку ''fcmBundleHandler'' в состояние из параметра '''eventID''' бандла. | ||
+ | TODO | ||
===Отправка сообщений=== | ===Отправка сообщений=== |
Версия 16:02, 12 ноября 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" и переводить объект "notification" в состояние "set".
Теперь при нажатии на кнопку в очередь будет поставлено извещение, которое покажет система через 5 минут. На устройстве это выглядит так:
Информация в логах
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], дабы при сборке подтянулся нужный экстеншн.
Обработка в редакторе
- 0. Определиться, какие евенты вы хотите обрабатывать (поле eventID в пуше) и с какими параметрами (эт важно!)
- 1. Создать объект Notifications, т.к. вся коммуникация идет через него
- 2. Создать машинку-обработчик и указать её в поле Обработчик бандлов (fcmBundleHandler) объекта Notifications
- 3. Создать машинку, которая будет раз в определенный период дёргать Notifications в состояние fcm_check_bundle
- 4.0. В состоянии fcm_check_bundle объект Notifications проверяет опции на наличие бандлов из firebase сообщений.
Если бандл имеется - Notifications переводит машинку fcmBundleHandler в состояние из параметра eventID бандла. TODO
Отправка сообщений
todo
Особенности использования
Сообщения firebase имеют два основных блока:
- notification - стандартный пуш, содержит заголовок и текст сообщения;
- data payload - содержит произвольный набор параметров ключ-зачение (с ограничением 4Кб в firebase и 50 штук в наших реалиях)
Сообщение может содержать либо один из этих блоков, либо оба сразу.
При наличии в сообщении блока notification оно автоматически трактуется системой как пуш и при получении такого на устройстве - сразу закидывает его в системный трей (т.е. без нашей обработки). Мы никак не властны над подобными сообщениями и их параметрами (с параметрами то отдельная тема), а значит никаких кастомизаций в виде цветного шрифта и/или картинки не будет.
Если сообщение имеет только data payload - оно всецело обрабатывается нашим движком, а значит мы имеем полный контроль над его отображением и всеми его параметрами. Но такие сообщения невозможно отправить из firebase консоли, только скриптом (либо из нашей одминки).
Для корректной работы, пожалуйста, используйте только data payload!