Push-уведомления — различия между версиями
(Новая страница: «Push-сообщения могут отправляться через PCIS Internal, либо через pcwiki:PayControl Inform|P…») |
|||
Строка 102: | Строка 102: | ||
<syntaxhighlight lang="sql">INSERT INTO pc_push_credentials (systemid, android_push_template, google_api_key, ios_push_template, use_ios_fcm, apns_app_id, apns_key_file, apns_key_id, apns_team_id) VALUES ('e33affa9-1ff8-4d2a-aa42-856fb59309e0', '{"messages":[{"to":"%DEVICE_TOKEN%","notification":{"tag":"%USER_ID%","title":"PayControl","body":"%PUSH_TEXT%","icon":"paycontrol_push","sound":"default"},"data":{"type":"PayControl_v2"}},{"to":"%DEVICE_TOKEN%","data": {"type": "PayControl_v2", "userid": "%USER_ID%"}}]}', 'AAAAZJTm6y0:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', '{"messages":[{"aps":{"alert":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"type":"%PUSH_TYPE%","userid":"%USER_ID%"}]}', '0','ru.safe-tech.PayControl.v3','/opt/wildfly/safetech-apns-JVBQX52N5Z.p8','JVXXXXXXXXX','48XXXXXXX');</syntaxhighlight> | <syntaxhighlight lang="sql">INSERT INTO pc_push_credentials (systemid, android_push_template, google_api_key, ios_push_template, use_ios_fcm, apns_app_id, apns_key_file, apns_key_id, apns_team_id) VALUES ('e33affa9-1ff8-4d2a-aa42-856fb59309e0', '{"messages":[{"to":"%DEVICE_TOKEN%","notification":{"tag":"%USER_ID%","title":"PayControl","body":"%PUSH_TEXT%","icon":"paycontrol_push","sound":"default"},"data":{"type":"PayControl_v2"}},{"to":"%DEVICE_TOKEN%","data": {"type": "PayControl_v2", "userid": "%USER_ID%"}}]}', 'AAAAZJTm6y0:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', '{"messages":[{"aps":{"alert":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"type":"%PUSH_TYPE%","userid":"%USER_ID%"}]}', '0','ru.safe-tech.PayControl.v3','/opt/wildfly/safetech-apns-JVBQX52N5Z.p8','JVXXXXXXXXX','48XXXXXXX');</syntaxhighlight> | ||
+ | == Использование FCM для iOS == | ||
+ | В таблице pc_push_credentials можно выставить значение use_ios_fcm в значение 1. В этом случае для отправки push-сообщения в iOS будет использоваться Google Firebase.<br> | ||
+ | '''При использовании use_ios_fcm обязательно указать шаблон push-сообщения для iOS, иначе push-сообщение пойдет в формате APNS, что вызовет ошибку'''<br> | ||
+ | Пример шаблона push-сообщения для iOS через FCM:<syntaxhighlight lang="json">{"messages":[{"to":"%DEVICE_TOKEN%","notification":{"title":"Название Банка","body":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"data":{"type" : "%PUSH_TYPE%","userid":"%USER_ID%"}}]}</syntaxhighlight> | ||
+ | Пример запроса к БД PCIS для переключения на использование FCM для iOS: | ||
+ | <syntaxhighlight lang="sql">update pc_push_credentials set use_ios_fcm=1, ios_push_template='{"messages":[{"to":"%DEVICE_TOKEN%","notification":{"title":"Название банка","body":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"data":{"type":"%PUSH_TYPE%","userid":"%USER_ID%"}}]}';</syntaxhighlight> | ||
+ | |||
+ | =Настройка для работы через [[pcwiki:PayControl Inform|PayControl Inform]]= | ||
+ | В [[База данных PayControl#pc_system|БД PCS в таблице pc_system]] значение pc_is_internal_url должно иметь вид: | ||
+ | [pc-inform]{PayControl Infrom URL} | ||
+ | Например: | ||
+ | [pc-inform]http://pcinform.local/api/notification/ | ||
+ | |||
+ | Для настройки шаблонов push-сообщений, в БД PCS, в [[Сервер PayControl#PCS|таблице pc_sys_properties]] должны быть записи (формат шаблона - PC Inform): | ||
+ | setting_name = ANDROID_PUSH_PAYLOAD_TEMPLATE | ||
+ | setting_value = {"messages":[{"notification":{"tag":"%USER_ID%","title":"PayControl","body":"%PUSH_TEXT%","icon":"paycontrol_push","sound":"default"},"data":{"type":"PayControl_v2"}},{"data": {"type": "PayControl_v2", "userid": "%USER_ID%"}}]} | ||
+ | |||
+ | setting_name = IOS_PUSH_PAYLOAD_TEMPLATE | ||
+ | setting_value = {"messages":[{"aps":{"alert":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"type":"%PUSH_TYPE%","userid":"%USER_ID%"}]} | ||
+ | |||
+ | =Адреса серверов для отправки Push= | ||
+ | ==Apple Push Notification Service== | ||
+ | Development server: api.development.push.apple.com:443 (используется для отправки уведомлений в debug-сборки (залитые из XCode)) | ||
+ | |||
+ | Production server: '''api.push.apple.com:443''' (Используется для отправки в приложения из AppStore и TestFlight) | ||
+ | |||
+ | ''!!!В PayControl в настоящее время не используется!!! Вместо порта 443 можно использовать порт 2197 для связи с APNS. К примеру этот порт можно использовать, если система фильтрации на межсетевом экране не позволяет разрешить трафик по 443 порту исключительно с серверами APNS.'' | ||
+ | |||
+ | [[Участник:A.bursakov|A.bursakov]] ([[Обсуждение участника:A.bursakov|обсуждение]]) 16:47, 7 августа 2018 (MSK) | ||
+ | |||
+ | Источник - https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html | ||
+ | |||
+ | ==Google Firebase== | ||
+ | ===Legacy=== | ||
+ | Для отправки push-сообщений, запросы должны отправляться по адресу https://'''fcm.googleapis.com:443'''/fcm/send | ||
+ | |||
+ | [[Участник:A.bursakov|A.bursakov]] ([[Обсуждение участника:A.bursakov|обсуждение]]) 16:47, 7 августа 2018 (MSK) | ||
+ | |||
+ | Источник - https://firebase.google.com/docs/cloud-messaging/http-server-ref | ||
+ | =Аутентификация= | ||
+ | Для отправки push-уведомлений требуется аутентификация. | ||
+ | ==Перечисление аутентификационных данных== | ||
+ | ===Android=== | ||
+ | * Google API Key | ||
+ | ===iOS=== | ||
+ | Для аутентификации используется либо ключ (p8), либо сертификат (p12). | ||
+ | ====p8==== | ||
+ | Аутентификация посредством ключевого файла. Ключ имеет неограниченный срок действия. Требуются следующие данные: | ||
+ | * ключевой файл в формате p8; | ||
+ | * APNS App ID, | ||
+ | * APNS Key ID, | ||
+ | * APNS Team ID. | ||
+ | ====p12==== | ||
+ | Аутентификация посредством сертификата, имеющего ограниченный срок действия. Требуются следующие данные: | ||
+ | * APNS App ID, | ||
+ | * сертификат в формате контейнера p12, | ||
+ | * пароль для доступа к закрытой части ключа в контейнере. | ||
+ | ==Установка аутентификационных данных== | ||
+ | Перед внесением необходимо заменить %SYSTEMID% на идентификатор системы. | ||
+ | ===Сервер PayControl 3.6=== | ||
+ | Аутентификационные данные для приложения PayControl: | ||
+ | <syntaxhighlight lang="sql">INSERT INTO pc_push_credentials ( | ||
+ | systemid, | ||
+ | google_api_key, | ||
+ | use_ios_fcm, | ||
+ | apns_app_id, | ||
+ | apns_key_file, | ||
+ | apns_key_id, | ||
+ | apns_team_id) | ||
+ | VALUES ( | ||
+ | '%SYSTEMID%', | ||
+ | 'AAAAZJTm6y0:APA91bF1OQYv9T2opZtIMJPZknA7tGLifzvTVB3PFSlQejBzPzyeYg4JFn-nud5mE_pZe920I2zR-8Lv-yabeaJ8PdduS96G3ESj_pfxAJAhaT1JistaXMchspMkPLL0e8tLxCmBzhda', | ||
+ | '0', | ||
+ | 'ru.safe-tech.PayControl.v3', | ||
+ | '/opt/wildfly/safetech-apns-JVBQX52N5Z.p8', | ||
+ | 'JVBQX52N5Z', | ||
+ | '48HZH4RWJD');</syntaxhighlight> | ||
+ | |||
+ | ===Сервер PayControl 3.7 и выше=== | ||
+ | ====Структура записи==== | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | INSERT INTO pc_split_pusher_credentials ( | ||
+ | id, | ||
+ | appid, | ||
+ | credentials, | ||
+ | is_default, | ||
+ | os, | ||
+ | systemid, | ||
+ | templates, | ||
+ | use_ios_fcm) | ||
+ | VALUES ( | ||
+ | nextval('pc_split_pusher_creds_seq'), | ||
+ | 'org.payconfirm.app', | ||
+ | '{"google_api_key":"AAAAPvs4KBA:APA91bEEv_nwmSQZPDBGh0gn2PwqRQusHJNdlekZ-eKcj8IYrm18EcXwJ1wt6nUEOavGcVjPuXJmfhV_9oS6VNbtKjyQSqBb3HHMnJZp6FauWz6hWpVcqsbenqkgamFgCAl1Exrd3JV_"}', | ||
+ | 0, | ||
+ | 'Android', | ||
+ | '%SYSTEMID%', | ||
+ | '{"messages":[{"to":"%DEVICE_TOKEN%","notification":{"tag":"%USER_ID%","title":"PayControl","body":"%PUSH_TEXT%","icon":"paycontrol_push","sound":"default"},"data":{"type":"PayControl_v2"}},{"to":"%DEVICE_TOKEN%","data": {"type": "PayControl_v2", "userid": "%USER_ID%"}}]}', | ||
+ | 0); | ||
+ | </syntaxhighlight> | ||
+ | ====== Поле credentials для iOS ====== | ||
+ | <syntaxhighlight lang="json"> | ||
+ | { | ||
+ | "apns_key_file": "/opt/wildfly/safetech-apns-JVBQX52N5Z.p8", | ||
+ | "apns_key_id": "JVBQX52N5Z", | ||
+ | "apns_team_id": "48HZH4RWJD", | ||
+ | "apnsP12File" : "/opt/wildfly/certificate.p12", | ||
+ | "apnsP12Pass" : "************", | ||
+ | "use_dev_gate": false | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===== Поле templates iOS ===== | ||
+ | <syntaxhighlight lang="json"> | ||
+ | { | ||
+ | "messages": [ | ||
+ | { | ||
+ | "aps": { | ||
+ | "alert": "%PUSH_TEXT%", | ||
+ | "sound": "%PUSH_SOUND%", | ||
+ | "badge": "%PUSH_IOS_BADGE%" | ||
+ | }, | ||
+ | "type": "%PUSH_TYPE%", | ||
+ | "userid": "%USER_ID%", | ||
+ | |||
+ | "pc_notification_type" : "alert/background", | ||
+ | "pc_notification_priority" : 10, | ||
+ | "pc_notification_timeout": 600, | ||
+ | "pc_collapse_id": "%USER_ID%" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | Параметры с версии 3.7.398 | ||
+ | * pc_notification_type | ||
+ | * pc_notification_priority | ||
+ | * pc_notification_timeout | ||
+ | * ''pc_collapse_id (с 5.0.110?)'' | ||
+ | задают соответственно | ||
+ | * apns-push-type. Возможные значения alert/background/voip/complication/fileprovider/mdm. По-умолчанию alert. | ||
+ | * apns-priority. Возможные значения 5 или 10. По-умолчанию 10. | ||
+ | * apns-expiration. Задаётся в секундах. Максимально возможное значение в секундах 2147483647. По-умолчанию не передаётся. | ||
+ | * ''apns-collapse-id. Значение, по которому будут группироваться и очищаться пуши (с 5.0.110?)''. | ||
+ | pc_notification_timeout влияет на установку значение apns-expiration, вычисляющегося как (текущее значение UnixTime)+APNS_EXPIRATION. | ||
+ | |||
+ | Подробнее https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns | ||
+ | |||
+ | Также с версии 3.7.398 в таблице pc_sys_property добавлен параметр APNS_EXPIRATION значение из которого будет браться, если в шаблоне не установлено значение pc_notification_timeout. | ||
+ | |||
+ | ===== Поле credentials для Android ===== | ||
+ | <syntaxhighlight lang="json"> | ||
+ | {"google_api_key":"AAAAZJTm6y0:APA91bF1OQYv9T2opZtIMJPZknA7tGLifzvTVB3PFSlQejBzPzyeYg4JFn-nud5mE_pZe920I2zR-8Lv-yabeaJ8PdduS96G3ESj_pfxAJAhaT1JistaXMchspMkPLL0e8tLxCmBzhda"} | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ====PayControl 3==== | ||
+ | =====Android===== | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | INSERT INTO pc_split_pusher_credentials ( | ||
+ | id, | ||
+ | appid, | ||
+ | credentials, | ||
+ | is_default, | ||
+ | os, | ||
+ | systemid) | ||
+ | VALUES ( | ||
+ | nextval('pc_split_pusher_creds_seq'), | ||
+ | 'ru.safe-tech.PayControl.v3', | ||
+ | '{"google_api_key":"AAAAZJTm6y0:APA91bF1OQYv9T2opZtIMJPZknA7tGLifzvTVB3PFSlQejBzPzyeYg4JFn-nud5mE_pZe920I2zR-8Lv-yabeaJ8PdduS96G3ESj_pfxAJAhaT1JistaXMchspMkPLL0e8tLxCmBzhda"}', | ||
+ | 1, | ||
+ | 'Android', | ||
+ | '%SYSTEMID%'); | ||
+ | </syntaxhighlight> | ||
+ | =====iOS===== | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | INSERT INTO pc_split_pusher_credentials ( | ||
+ | id, | ||
+ | appid, | ||
+ | credentials, | ||
+ | is_default, | ||
+ | os, | ||
+ | systemid) | ||
+ | VALUES ( | ||
+ | nextval('pc_split_pusher_creds_seq'), | ||
+ | 'ru.safe-tech.PayControl.v3', | ||
+ | '{"apns_key_file":"/opt/wildfly/safetech-apns-JVBQX52N5Z.p8","apns_key_id":"JVBQX52N5Z","apns_team_id":"48HZH4RWJD"}', | ||
+ | 1, | ||
+ | 'iOS', | ||
+ | '%SYSTEMID%'); | ||
+ | </syntaxhighlight> | ||
+ | =====iOS sandbox===== | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | INSERT INTO pc_split_pusher_credentials ( | ||
+ | id, | ||
+ | appid, | ||
+ | credentials, | ||
+ | os, | ||
+ | systemid) | ||
+ | VALUES ( | ||
+ | nextval('pc_split_pusher_creds_seq'), | ||
+ | 'ru.safe-tech.PayControl.v3.dev', | ||
+ | '{"apns_key_file":"/opt/wildfly/safetech-apns-JVBQX52N5Z.p8","apns_key_id":"JVBQX52N5Z","apns_team_id":"48HZH4RWJD","use_dev_gate": true}', | ||
+ | 'iOS', | ||
+ | '%SYSTEMID%'); | ||
+ | </syntaxhighlight> | ||
+ | ====PayControl 5==== | ||
+ | =====Android===== | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | INSERT INTO pc_split_pusher_credentials ( | ||
+ | id, | ||
+ | appid, | ||
+ | credentials, | ||
+ | os, | ||
+ | systemid) | ||
+ | VALUES ( | ||
+ | nextval('pc_split_pusher_creds_seq'), | ||
+ | 'org.paycontrol.app', | ||
+ | '{"google_api_key":"AAAAoZ7vyz4:APA91bFqLfNegQCs_GfHGFeOmS68PHWWSzWpeZaYKfnLul9iHufIQJiNIAjgAykeWrTxiDDs9qQzullXww3o5XR0VS9tlBEpuhTMlz4CyHdmN2EhntJBBUlSQa-8--Rw_UzDbKBCGCXk"}', | ||
+ | 'Android', | ||
+ | '%SYSTEMID%'); | ||
+ | </syntaxhighlight> | ||
+ | =====iOS===== | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | INSERT INTO pc_split_pusher_credentials ( | ||
+ | id, | ||
+ | appid, | ||
+ | credentials, | ||
+ | os, | ||
+ | systemid) | ||
+ | VALUES ( | ||
+ | nextval('pc_split_pusher_creds_seq'), | ||
+ | 'org.paycontrol.app', | ||
+ | '{"apns_key_file":"/opt/wildfly/safetech-apns-JVBQX52N5Z.p8","apns_key_id":"JVBQX52N5Z","apns_team_id":"48HZH4RWJD"}', | ||
+ | 'iOS', | ||
+ | '%SYSTEMID%'); | ||
+ | </syntaxhighlight> | ||
+ | =====iOS sandbox===== | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | INSERT INTO pc_split_pusher_credentials ( | ||
+ | id, | ||
+ | appid, | ||
+ | credentials, | ||
+ | os, | ||
+ | systemid) | ||
+ | VALUES ( | ||
+ | nextval('pc_split_pusher_creds_seq'), | ||
+ | 'org.paycontrol.app.dev', | ||
+ | '{"apns_key_file":"/opt/wildfly/safetech-apns-JVBQX52N5Z.p8","apns_key_id":"JVBQX52N5Z","apns_team_id":"48HZH4RWJD","use_dev_gate": true}', | ||
+ | 'iOS', | ||
+ | '%SYSTEMID%'); | ||
+ | </syntaxhighlight> | ||
+ | ====PayConfirm 5==== | ||
+ | =====Android===== | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | INSERT INTO pc_split_pusher_credentials ( | ||
+ | id, | ||
+ | appid, | ||
+ | credentials, | ||
+ | os, | ||
+ | systemid) | ||
+ | VALUES ( | ||
+ | nextval('pc_split_pusher_creds_seq'), | ||
+ | 'org.payconfirm.app', | ||
+ | '{"google_api_key":"AAAA4H70m7M:APA91bFsaPiXXiIuRyj4h-xGZpyd0-I3B9F1udIIergxaK8uL9vPPvUQXOvPfau2w8E-xur_6TlTzmhb2JsO13hBCxVDrNybD6Rj8k4hZKXfs7tC5fnJuWmCIB3-O_4dLo0QHlhfSbGn"}', | ||
+ | 'Android', | ||
+ | '%SYSTEMID%'); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | =====iOS===== | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | INSERT INTO pc_split_pusher_credentials ( | ||
+ | id, | ||
+ | appid, | ||
+ | credentials, | ||
+ | os, | ||
+ | systemid) | ||
+ | VALUES ( | ||
+ | nextval('pc_split_pusher_creds_seq'), | ||
+ | 'org.payconfirm.app', | ||
+ | '{"apns_key_file":"/opt/pc/AuthKey_QCC684AGC4.p8","apns_key_id":"QCC684AGC4","apns_team_id":"B98K5P3YHV"}', | ||
+ | 'iOS', | ||
+ | '%SYSTEMID%'); | ||
+ | </syntaxhighlight> | ||
+ | =====iOS Sandbox===== | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | INSERT INTO pc_split_pusher_credentials ( | ||
+ | id, | ||
+ | appid, | ||
+ | credentials, | ||
+ | os, | ||
+ | systemid) | ||
+ | VALUES ( | ||
+ | nextval('pc_split_pusher_creds_seq'), | ||
+ | 'org.payconfirm.app.dev', | ||
+ | '{"apns_key_file":"/opt/pc/AuthKey_QCC684AGC4.p8","apns_key_id":"QCC684AGC4","apns_team_id":"B98K5P3YHV","use_dev_gate": true}', | ||
+ | 'iOS', | ||
+ | '%SYSTEMID%'); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | =Проблемы при отправке пушей= | ||
+ | Проблемы при отправке пуша могут быть следующие: | ||
+ | * Создаётся транзакция без указания notification_type "PUSH" | ||
+ | * У PCS нет связи с PCP (ошибка свидетельствующая об этом должна быть в логе PCS, в момент попытки отправки пуша). | ||
+ | * У PCP не настроены уатентификационные данные для отпрвки пушей | ||
+ | * У PCP нет доступа к серверам Firebase/APNS | ||
+ | * На телефоне не разрешён приём пушей для приложения | ||
+ | [[Категория:Серверная часть]] | ||
+ | [[Категория:Мобильное приложение]] |
Версия 15:23, 31 мая 2021
Push-сообщения могут отправляться через PCIS Internal, либо через PayControl Inform.
Содержание
- 1 Настройка отправки через PayControl Interaction Server (Internal)
- 2 Настройка для работы через PayControl Inform
- 3 Адреса серверов для отправки Push
- 4 Аутентификация
- 5 Проблемы при отправке пушей
Настройка отправки через PayControl Interaction Server (Internal)
Настройки производятся в БД PCIS. Шаблон push-сообщений определяется в формате JSON. Существует два варианта настройки push-сообщений:
- для всех прикладных систем - задаётся в таблице pc_sys_property (setting_name = ANDROID_PUSH_PAYLOAD_TEMPLATE/IOS_PUSH_PAYLOAD_TEMPLATE);
- для каждой прикладной системы отдельно. Имеет более высокий приоритет. Задаётся в таблице pc_push_credentials. Поля ios_push_template и android_push_template
Переменные
Доступны следующие переменные для использования в шаблоне:
Переменная | Значение |
---|---|
%PUSH_TEXT% | PUSH_TEXT |
%PUSH_TITLE% | PUSH_TITLE |
%PUSH_SOUND% | PUSH_IOS_SOUND либо PUSH_ANDROID_SOUND, в зависимости от устройства, на которое отправляется пуш |
%PUSH_ICON% | PUSH_ICON |
%PUSH_IOS_BADGE% | PUSH_IOS_BADGE |
%PUSH_TYPE% | "PayControl" |
%USER_ID% | userId |
%SYSTEM_ID% | systemId |
%TRANSACTION_ID% | transactionId |
%DEVICE_TOKEN% | deviceId |
Шаблоны для разных версий PCIS
До версии PCIS 3.5 включительно
При создании транзакции отправляется одно push сообщение.
Версия PCIS 3.5.5
При отправке оповещения о созданной транзакции на android отправляются два push-сообщения - Notification и Silent. Такая модификация потребовалась в связи с тем, что некоторые устройства не будят приложение для отрисовки уведомления. Для этого в БД PCIS Internal добавлено поле android_second_push_template.
Таким образом, значения полей выглядят следующим образом:
Поле | Значение |
---|---|
android_push_template | {"to":"%DEVICE_TOKEN%","notification":{"tag":"%USER_ID%","title":"PayControl","body":"%PUSH_TEXT%","icon":"paycontrol_push","sound":"default"},"data":{"type":"PayControl_v2"}}
|
android_second_push_template | {"to":"%DEVICE_TOKEN%","data": {"type": "PayControl_v2", "userid": "%USER_ID%"}}
|
С версии PCIS 3.6
Шаблон push-сообщений определяется как массив шаблонов сообщений в формате JSON, которые отправляются последовательно (количество элементов в массиве - от 1):
{"messages":[массив объектов шаблонов push-сообщений, который будет отправлен PayControl]}
Пример:
- android_push_template
{"messages":[{"to":"%DEVICE_TOKEN%","notification":{"tag":"%USER_ID%","title":"PayControl","body":"%PUSH_TEXT%","icon":"paycontrol_push","sound":"default"},"data":{"type":"PayControl_v2"}},{"to":"%DEVICE_TOKEN%","data": {"type": "PayControl_v2", "userid": "%USER_ID%"}}]}
- ios_push_template
{"messages":[{"aps":{"alert":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"type":"%PUSH_TYPE%","userid":"%USER_ID%"}]}
Для мобильных приложений версии 3.7 и выше
На Android стало достаточно отправки одного data-пуша. При этом можно указать следующие типы (type) (регистр не имеет значения):
- paycontrol и payconfirm - звук и вибрация;
- PayControl-v2 - использовать не стоит, т.к. в этом случае звука или вибрации не будет. Применяется в случае, если отправляется 2 пуша - notification и data.
{"messages":[{"to":"%DEVICE_TOKEN%","data": {"type": "paycontrol", "userid": "%USER_ID%"}}]}
Тем не менее, шаблон следующий:
{
"messages":[
{
"to":"%DEVICE_TOKEN%",
"notification":{
"tag":"%USER_ID%",
"title":"PayControl",
"body":"%PUSH_TEXT%",
"icon":"paycontrol_push",
"sound":"default"
},
"data":{
"type":"PayControl_v2"
}
},
{
"to":"%DEVICE_TOKEN%",
"data":{
"type":"PayControl_v2",
"userid":"%USER_ID%"
}
}
]
}
Установка новых шаблонов в БД
Обновление шаблонов
update pc_push_credentials set android_push_template='{"messages":[{"to":"%DEVICE_TOKEN%","notification":{"tag":"%USER_ID%","title":"PayControl","body":"%PUSH_TEXT%","icon":"paycontrol_push","sound":"default"},"data":{"type":"PayControl_v2"}},{"to":"%DEVICE_TOKEN%","data": {"type": "PayControl_v2", "userid": "%USER_ID%"}}]}' where systemid='bef89e01-f248-4841-bd62-8b08056e6fea';
update pc_push_credentials set ios_push_template='{"messages":[{"aps":{"alert":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"type":"%PUSH_TYPE%","userid":"%USER_ID%"}]}' where systemid='bef89e01-f248-4841-bd62-8b08056e6fea';
Удаление шаблона второго push-сообщения:
update pc_push_credentials set android_second_push_template = NULL;
Одним запросом:
update pc_push_credentials set android_push_template='{"messages":[{"to":"%DEVICE_TOKEN%","notification":{"tag":"%USER_ID%","title":"PayControl","body":"%PUSH_TEXT%","icon":"paycontrol_push","sound":"default"},"data":{"type":"PayControl_v2"}},{"to":"%DEVICE_TOKEN%","data": {"type": "PayControl_v2", "userid": "%USER_ID%"}}]}', ios_push_template='{"messages":[{"aps":{"alert":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"type":"%PUSH_TYPE%","userid":"%USER_ID%"}]}', android_second_push_template = NULL;
Добавление новой записи
Указать верные:
- google_api_key
- apns_key_file
- apns_key_id
- apns_team_id
Уточнить:
- apns_app_id
INSERT INTO pc_push_credentials (systemid, android_push_template, google_api_key, ios_push_template, use_ios_fcm, apns_app_id, apns_key_file, apns_key_id, apns_team_id) VALUES ('e33affa9-1ff8-4d2a-aa42-856fb59309e0', '{"messages":[{"to":"%DEVICE_TOKEN%","notification":{"tag":"%USER_ID%","title":"PayControl","body":"%PUSH_TEXT%","icon":"paycontrol_push","sound":"default"},"data":{"type":"PayControl_v2"}},{"to":"%DEVICE_TOKEN%","data": {"type": "PayControl_v2", "userid": "%USER_ID%"}}]}', 'AAAAZJTm6y0:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', '{"messages":[{"aps":{"alert":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"type":"%PUSH_TYPE%","userid":"%USER_ID%"}]}', '0','ru.safe-tech.PayControl.v3','/opt/wildfly/safetech-apns-JVBQX52N5Z.p8','JVXXXXXXXXX','48XXXXXXX');
Использование FCM для iOS
В таблице pc_push_credentials можно выставить значение use_ios_fcm в значение 1. В этом случае для отправки push-сообщения в iOS будет использоваться Google Firebase.
При использовании use_ios_fcm обязательно указать шаблон push-сообщения для iOS, иначе push-сообщение пойдет в формате APNS, что вызовет ошибку
Пример шаблона push-сообщения для iOS через FCM:
{"messages":[{"to":"%DEVICE_TOKEN%","notification":{"title":"Название Банка","body":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"data":{"type" : "%PUSH_TYPE%","userid":"%USER_ID%"}}]}
Пример запроса к БД PCIS для переключения на использование FCM для iOS:
update pc_push_credentials set use_ios_fcm=1, ios_push_template='{"messages":[{"to":"%DEVICE_TOKEN%","notification":{"title":"Название банка","body":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"data":{"type":"%PUSH_TYPE%","userid":"%USER_ID%"}}]}';
Настройка для работы через PayControl Inform
В БД PCS в таблице pc_system значение pc_is_internal_url должно иметь вид:
[pc-inform]{PayControl Infrom URL}
Например:
[pc-inform]http://pcinform.local/api/notification/
Для настройки шаблонов push-сообщений, в БД PCS, в таблице pc_sys_properties должны быть записи (формат шаблона - PC Inform):
setting_name = ANDROID_PUSH_PAYLOAD_TEMPLATE setting_value = {"messages":[{"notification":{"tag":"%USER_ID%","title":"PayControl","body":"%PUSH_TEXT%","icon":"paycontrol_push","sound":"default"},"data":{"type":"PayControl_v2"}},{"data": {"type": "PayControl_v2", "userid": "%USER_ID%"}}]}
setting_name = IOS_PUSH_PAYLOAD_TEMPLATE setting_value = {"messages":[{"aps":{"alert":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"type":"%PUSH_TYPE%","userid":"%USER_ID%"}]}
Адреса серверов для отправки Push
Apple Push Notification Service
Development server: api.development.push.apple.com:443 (используется для отправки уведомлений в debug-сборки (залитые из XCode))
Production server: api.push.apple.com:443 (Используется для отправки в приложения из AppStore и TestFlight)
!!!В PayControl в настоящее время не используется!!! Вместо порта 443 можно использовать порт 2197 для связи с APNS. К примеру этот порт можно использовать, если система фильтрации на межсетевом экране не позволяет разрешить трафик по 443 порту исключительно с серверами APNS.
A.bursakov (обсуждение) 16:47, 7 августа 2018 (MSK)
Google Firebase
Legacy
Для отправки push-сообщений, запросы должны отправляться по адресу https://fcm.googleapis.com:443/fcm/send
A.bursakov (обсуждение) 16:47, 7 августа 2018 (MSK)
Источник - https://firebase.google.com/docs/cloud-messaging/http-server-ref
Аутентификация
Для отправки push-уведомлений требуется аутентификация.
Перечисление аутентификационных данных
Android
- Google API Key
iOS
Для аутентификации используется либо ключ (p8), либо сертификат (p12).
p8
Аутентификация посредством ключевого файла. Ключ имеет неограниченный срок действия. Требуются следующие данные:
- ключевой файл в формате p8;
- APNS App ID,
- APNS Key ID,
- APNS Team ID.
p12
Аутентификация посредством сертификата, имеющего ограниченный срок действия. Требуются следующие данные:
- APNS App ID,
- сертификат в формате контейнера p12,
- пароль для доступа к закрытой части ключа в контейнере.
Установка аутентификационных данных
Перед внесением необходимо заменить %SYSTEMID% на идентификатор системы.
Сервер PayControl 3.6
Аутентификационные данные для приложения PayControl:
INSERT INTO pc_push_credentials (
systemid,
google_api_key,
use_ios_fcm,
apns_app_id,
apns_key_file,
apns_key_id,
apns_team_id)
VALUES (
'%SYSTEMID%',
'AAAAZJTm6y0:APA91bF1OQYv9T2opZtIMJPZknA7tGLifzvTVB3PFSlQejBzPzyeYg4JFn-nud5mE_pZe920I2zR-8Lv-yabeaJ8PdduS96G3ESj_pfxAJAhaT1JistaXMchspMkPLL0e8tLxCmBzhda',
'0',
'ru.safe-tech.PayControl.v3',
'/opt/wildfly/safetech-apns-JVBQX52N5Z.p8',
'JVBQX52N5Z',
'48HZH4RWJD');
Сервер PayControl 3.7 и выше
Структура записи
INSERT INTO pc_split_pusher_credentials (
id,
appid,
credentials,
is_default,
os,
systemid,
templates,
use_ios_fcm)
VALUES (
nextval('pc_split_pusher_creds_seq'),
'org.payconfirm.app',
'{"google_api_key":"AAAAPvs4KBA:APA91bEEv_nwmSQZPDBGh0gn2PwqRQusHJNdlekZ-eKcj8IYrm18EcXwJ1wt6nUEOavGcVjPuXJmfhV_9oS6VNbtKjyQSqBb3HHMnJZp6FauWz6hWpVcqsbenqkgamFgCAl1Exrd3JV_"}',
0,
'Android',
'%SYSTEMID%',
'{"messages":[{"to":"%DEVICE_TOKEN%","notification":{"tag":"%USER_ID%","title":"PayControl","body":"%PUSH_TEXT%","icon":"paycontrol_push","sound":"default"},"data":{"type":"PayControl_v2"}},{"to":"%DEVICE_TOKEN%","data": {"type": "PayControl_v2", "userid": "%USER_ID%"}}]}',
0);
Поле credentials для iOS
{
"apns_key_file": "/opt/wildfly/safetech-apns-JVBQX52N5Z.p8",
"apns_key_id": "JVBQX52N5Z",
"apns_team_id": "48HZH4RWJD",
"apnsP12File" : "/opt/wildfly/certificate.p12",
"apnsP12Pass" : "************",
"use_dev_gate": false
}
Поле templates iOS
{
"messages": [
{
"aps": {
"alert": "%PUSH_TEXT%",
"sound": "%PUSH_SOUND%",
"badge": "%PUSH_IOS_BADGE%"
},
"type": "%PUSH_TYPE%",
"userid": "%USER_ID%",
"pc_notification_type" : "alert/background",
"pc_notification_priority" : 10,
"pc_notification_timeout": 600,
"pc_collapse_id": "%USER_ID%"
}
]
}
Параметры с версии 3.7.398
- pc_notification_type
- pc_notification_priority
- pc_notification_timeout
- pc_collapse_id (с 5.0.110?)
задают соответственно
- apns-push-type. Возможные значения alert/background/voip/complication/fileprovider/mdm. По-умолчанию alert.
- apns-priority. Возможные значения 5 или 10. По-умолчанию 10.
- apns-expiration. Задаётся в секундах. Максимально возможное значение в секундах 2147483647. По-умолчанию не передаётся.
- apns-collapse-id. Значение, по которому будут группироваться и очищаться пуши (с 5.0.110?).
pc_notification_timeout влияет на установку значение apns-expiration, вычисляющегося как (текущее значение UnixTime)+APNS_EXPIRATION.
Также с версии 3.7.398 в таблице pc_sys_property добавлен параметр APNS_EXPIRATION значение из которого будет браться, если в шаблоне не установлено значение pc_notification_timeout.
Поле credentials для Android
{"google_api_key":"AAAAZJTm6y0:APA91bF1OQYv9T2opZtIMJPZknA7tGLifzvTVB3PFSlQejBzPzyeYg4JFn-nud5mE_pZe920I2zR-8Lv-yabeaJ8PdduS96G3ESj_pfxAJAhaT1JistaXMchspMkPLL0e8tLxCmBzhda"}
PayControl 3
Android
INSERT INTO pc_split_pusher_credentials (
id,
appid,
credentials,
is_default,
os,
systemid)
VALUES (
nextval('pc_split_pusher_creds_seq'),
'ru.safe-tech.PayControl.v3',
'{"google_api_key":"AAAAZJTm6y0:APA91bF1OQYv9T2opZtIMJPZknA7tGLifzvTVB3PFSlQejBzPzyeYg4JFn-nud5mE_pZe920I2zR-8Lv-yabeaJ8PdduS96G3ESj_pfxAJAhaT1JistaXMchspMkPLL0e8tLxCmBzhda"}',
1,
'Android',
'%SYSTEMID%');
iOS
INSERT INTO pc_split_pusher_credentials (
id,
appid,
credentials,
is_default,
os,
systemid)
VALUES (
nextval('pc_split_pusher_creds_seq'),
'ru.safe-tech.PayControl.v3',
'{"apns_key_file":"/opt/wildfly/safetech-apns-JVBQX52N5Z.p8","apns_key_id":"JVBQX52N5Z","apns_team_id":"48HZH4RWJD"}',
1,
'iOS',
'%SYSTEMID%');
iOS sandbox
INSERT INTO pc_split_pusher_credentials (
id,
appid,
credentials,
os,
systemid)
VALUES (
nextval('pc_split_pusher_creds_seq'),
'ru.safe-tech.PayControl.v3.dev',
'{"apns_key_file":"/opt/wildfly/safetech-apns-JVBQX52N5Z.p8","apns_key_id":"JVBQX52N5Z","apns_team_id":"48HZH4RWJD","use_dev_gate": true}',
'iOS',
'%SYSTEMID%');
PayControl 5
Android
INSERT INTO pc_split_pusher_credentials (
id,
appid,
credentials,
os,
systemid)
VALUES (
nextval('pc_split_pusher_creds_seq'),
'org.paycontrol.app',
'{"google_api_key":"AAAAoZ7vyz4:APA91bFqLfNegQCs_GfHGFeOmS68PHWWSzWpeZaYKfnLul9iHufIQJiNIAjgAykeWrTxiDDs9qQzullXww3o5XR0VS9tlBEpuhTMlz4CyHdmN2EhntJBBUlSQa-8--Rw_UzDbKBCGCXk"}',
'Android',
'%SYSTEMID%');
iOS
INSERT INTO pc_split_pusher_credentials (
id,
appid,
credentials,
os,
systemid)
VALUES (
nextval('pc_split_pusher_creds_seq'),
'org.paycontrol.app',
'{"apns_key_file":"/opt/wildfly/safetech-apns-JVBQX52N5Z.p8","apns_key_id":"JVBQX52N5Z","apns_team_id":"48HZH4RWJD"}',
'iOS',
'%SYSTEMID%');
iOS sandbox
INSERT INTO pc_split_pusher_credentials (
id,
appid,
credentials,
os,
systemid)
VALUES (
nextval('pc_split_pusher_creds_seq'),
'org.paycontrol.app.dev',
'{"apns_key_file":"/opt/wildfly/safetech-apns-JVBQX52N5Z.p8","apns_key_id":"JVBQX52N5Z","apns_team_id":"48HZH4RWJD","use_dev_gate": true}',
'iOS',
'%SYSTEMID%');
PayConfirm 5
Android
INSERT INTO pc_split_pusher_credentials (
id,
appid,
credentials,
os,
systemid)
VALUES (
nextval('pc_split_pusher_creds_seq'),
'org.payconfirm.app',
'{"google_api_key":"AAAA4H70m7M:APA91bFsaPiXXiIuRyj4h-xGZpyd0-I3B9F1udIIergxaK8uL9vPPvUQXOvPfau2w8E-xur_6TlTzmhb2JsO13hBCxVDrNybD6Rj8k4hZKXfs7tC5fnJuWmCIB3-O_4dLo0QHlhfSbGn"}',
'Android',
'%SYSTEMID%');
iOS
INSERT INTO pc_split_pusher_credentials (
id,
appid,
credentials,
os,
systemid)
VALUES (
nextval('pc_split_pusher_creds_seq'),
'org.payconfirm.app',
'{"apns_key_file":"/opt/pc/AuthKey_QCC684AGC4.p8","apns_key_id":"QCC684AGC4","apns_team_id":"B98K5P3YHV"}',
'iOS',
'%SYSTEMID%');
iOS Sandbox
INSERT INTO pc_split_pusher_credentials (
id,
appid,
credentials,
os,
systemid)
VALUES (
nextval('pc_split_pusher_creds_seq'),
'org.payconfirm.app.dev',
'{"apns_key_file":"/opt/pc/AuthKey_QCC684AGC4.p8","apns_key_id":"QCC684AGC4","apns_team_id":"B98K5P3YHV","use_dev_gate": true}',
'iOS',
'%SYSTEMID%');
Проблемы при отправке пушей
Проблемы при отправке пуша могут быть следующие:
- Создаётся транзакция без указания notification_type "PUSH"
- У PCS нет связи с PCP (ошибка свидетельствующая об этом должна быть в логе PCS, в момент попытки отправки пуша).
- У PCP не настроены уатентификационные данные для отпрвки пушей
- У PCP нет доступа к серверам Firebase/APNS
- На телефоне не разрешён приём пушей для приложения