Push-уведомления — различия между версиями
(→Адреса серверов для отправки Push) |
(→Legacy) |
||
Строка 397: | Строка 397: | ||
==Google Firebase== | ==Google Firebase== | ||
+ | ===Актуальный API=== | ||
+ | Для отправки push-сообщений, запросы должны отправляться по адресу https://'''fcmdata.googleapis.com''' | ||
+ | |||
+ | Источник - https://firebase.google.com/docs/reference/fcmdata/rest?hl=ru | ||
+ | |||
===Legacy=== | ===Legacy=== | ||
Для отправки push-сообщений, запросы должны отправляться по адресу https://'''fcm.googleapis.com:443'''/fcm/send | Для отправки push-сообщений, запросы должны отправляться по адресу https://'''fcm.googleapis.com:443'''/fcm/send | ||
Строка 403: | Строка 408: | ||
Источник - https://firebase.google.com/docs/cloud-messaging/http-server-ref | Источник - https://firebase.google.com/docs/cloud-messaging/http-server-ref | ||
+ | |||
==Huawei Mobile Services== | ==Huawei Mobile Services== | ||
Для отправки push-сообщений, запросы должны отправляться по адресу https://'''push-api.cloud.huawei.com''' ,порт 443 | Для отправки push-сообщений, запросы должны отправляться по адресу https://'''push-api.cloud.huawei.com''' ,порт 443 |
Версия 14:35, 18 декабря 2023
Push-сообщения могут отправляться через PCIS Internal, либо через PayControl Inform.
Содержание
- 1 Аутентификация
- 2 Настройка шаблонов PayControl Interaction Server Internal (при необходимости)
- 3 Настройка для работы через PayControl Inform
- 4 Адреса серверов для отправки Push
- 5 Проблемы при отправке пушей
Аутентификация
Для отправки 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 и 5.1
Структура записи
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%');
Сервер PayControl 5.2
Работа с аутентификационными данными в PayControl версии 5.2 описана в этой статье.
Настройка шаблонов 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
Актуальный API
Для отправки push-сообщений, запросы должны отправляться по адресу https://fcmdata.googleapis.com
Источник - https://firebase.google.com/docs/reference/fcmdata/rest?hl=ru
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
Huawei Mobile Services
Для отправки push-сообщений, запросы должны отправляться по адресу https://push-api.cloud.huawei.com ,порт 443
Также, с сервера PC Pusher должен быть доступен адрес: https://oauth-login.cloud.huawei.com/oauth2/v3/token
Источник - https://developer.huawei.com/consumer/en/doc/quickapp-access-push-kit#h2-1582279071471
Проблемы при отправке пушей
Проблемы при отправке пуша могут быть следующие:
- Создаётся транзакция без указания notification_type "PUSH"
- У PCS нет связи с PCP (ошибка свидетельствующая об этом должна быть в логе PCS, в момент попытки отправки пуша).
- У PCP не настроены аутентификационные данные для отправки пушей
- У PCP нет доступа к серверам Firebase/APNS
- На телефоне не разрешён приём пушей для приложения