Push-уведомления — различия между версиями

Материал из PayControl Wiki
Перейти к: навигация, поиск
(Новая страница: «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.

Содержание

Настройка отправки через PayControl Interaction Server (Internal)

Настройки производятся в БД PCIS. Шаблон push-сообщений определяется в формате JSON. Существует два варианта настройки push-сообщений:

Переменные

Доступны следующие переменные для использования в шаблоне:

Переменная Значение
%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)

Источник - 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 (обсуждение) 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.

Подробнее 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
{"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
  • На телефоне не разрешён приём пушей для приложения