Push-уведомления для мобильных приложений
Начиная с версии 6.5.6, сервер CommuniGate Pro отправляет push-уведомления на мобильные устройства (iOS через APNs, Android через Firebase Cloud Messaging HTTP v1 API). Настройки каждого мобильного приложения задаются в файле pushparams-<appName>.settings, загруженном в Среду Приложений Реального Времени (PBXApps).
Имя <appName> должно совпадать с полем appName в записи DeviceTokens учётной записи пользователя.
Размещение файла настроек
Файл pushparams-<appName>.settings загружается в PBXApps:
- общесерверную Среду — если настройки одинаковы для всех доменов;
- доменную Среду — если у разных доменов разные мобильные приложения или ключи.
Сервер сначала ищет файл в доменной Среде, затем в общесерверной. Подробнее о доступе к PBXApps см. Приложения Реального Времени.
Скрипт подготовки bearer-токенов pushprepare.scgp должен находиться в WebSkins (поставляется с сервером).
Общая структура
{
EventSubscription = (incomingEmail);
SettingsScript = pushprepare.scgp;
APNsServiceData = { ... }; // iOS, необязательный блок
FCMServiceData = { ... }; // Android, необязательный блок
}| Параметр | Описание |
|---|---|
EventSubscription | Список событий сервера, на которые подписано приложение. Пуш отправляется только если событие есть в этом списке. |
SettingsScript | Имя CG/PL-скрипта в WebSkins, который получает bearer-токены для APNs и FCM. Обычно pushprepare.scgp. |
APNsServiceData | Данные для аутентификации в Apple Push Notification service. Блок можно опустить, если iOS не используется. |
FCMServiceData | Данные сервисного аккаунта Firebase. Блок можно опустить, если Android не используется. |
Ключи APNsBearerToken и FCMBearerToken не задаются вручную — их добавляет скрипт pushprepare.scgp при отправке уведомления.
Поддерживаемые события
Сервер может отправлять push для следующих событий (полный список определяется приложением pushhandler):
| Событие | Назначение |
|---|---|
incomingEmail | Входящее письмо |
incomingIM | Входящее мгновенное сообщение |
incomingCall | Входящий звонок |
incomingSubscribe | Запрос на подписку |
incomingInfo | Входящее приглашение (Info) |
textMessage | Текстовое сообщение |
x2authPush | Двухфакторная аутентификация (код) |
x2authBio | Двухфакторная аутентификация (биометрия) |
unlockSMIME | Разблокировка S/MIME |
messenger | События мессенджера |
Для почтового клиента обычно достаточно incomingEmail. Для клиента с поддержкой звонков добавьте incomingCall и другие нужные события.
Настройка iOS (APNs)
Данные берутся из Apple Developer: создайте ключ APNs (файл .p8) и скопируйте Key ID и Team ID.
| Параметр | Настройка | Описание |
|---|---|---|
private_key | обязательно | Содержимое .p8-ключа в одной строке; переводы строк — через \n. |
key_id | обязательно | Key ID ключа APNs (10 символов). |
team_id | обязательно | Team ID организации в Apple Developer. |
bundle_id | обязательно | Bundle identifier iOS-приложения (используется как apns-topic при отправке). |
is_development | обязательно | YES — sandbox (debug, dev-сборки), NO — production (App Store, prod-сборки). Должно совпадать с типом device token на клиенте. |
api_host_development | обычно не менять | Хост APNs sandbox. По умолчанию api.sandbox.push.apple.com. |
api_host_production | обычно не менять | Хост APNs production. По умолчанию api.push.apple.com. |
Настройка Android (FCM)
Удобный способ: в консоли Firebase откройте Project settings → Service accounts → Generate new private key, скачайте JSON сервисного аккаунта и перенесите поля в FCMServiceData.
| Параметр | Настройка | Описание |
|---|---|---|
type | скопировать из JSON | Всегда service_account. |
project_id | обязательно | ID Firebase-проекта (используется в URL FCM v1 API). |
private_key_id | обязательно | Идентификатор приватного ключа из JSON. |
private_key | обязательно | Приватный ключ из JSON; вставить как одну строку с \n. |
client_email | обязательно | E-mail сервисного аккаунта (firebase-adminsdk-…@….iam.gserviceaccount.com). |
client_id | скопировать из JSON | Идентификатор клиента. |
auth_uri | скопировать из JSON | Стандартный URL Google OAuth. |
token_uri | скопировать из JSON | Стандартный URL (https://oauth2.googleapis.com/token). |
auth_provider_x509_cert_url | скопировать из JSON | URL сертификатов Google. |
client_x509_cert_url | скопировать из JSON | URL метаданных сервисного аккаунта (должен соответствовать client_email). |
universe_domain | скопировать из JSON | Обычно googleapis.com. |
Пример конфигурации
Пример для приложения с именем cgp:
{
// События сервера, на которые подписано приложение. Пуш уйдёт только если событие
// есть в этом списке. Список поддерживаемых событий — в pushutils.sppi (supportedEvents).
EventSubscription = (incomingEmail);
// Скрипт подготовки bearer-токенов для FCM и APNs (файл pushprepare.scgp в WebSkins).
// Менять не нужно, если используется стандартная схема аутентификации.
SettingsScript = pushprepare.scgp;
// --- iOS (Apple Push Notification service) ---
// Блок можно опустить целиком, если iOS-приложение не используется.
APNsServiceData = {
// ОБЯЗАТЕЛЬНО: содержимое .p8-ключа из Apple Developer (Certificates, Identifiers & Profiles → Keys).
// Вставьте как одну строку; переводы строк — через \n.
private_key = "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n";
// ОБЯЗАТЕЛЬНО: Key ID ключа APNs (10 символов), указан рядом с .p8 в Apple Developer.
key_id = "Key_ID";
// ОБЯЗАТЕЛЬНО: Team ID организации в Apple Developer.
team_id = "Team_ID";
// ОБЯЗАТЕЛЬНО: bundle identifier iOS-приложения (используется как apns-topic при отправке).
bundle_id = "com.example.app";
// ОБЯЗАТЕЛЬНО: YES — sandbox (debug/TestFlight dev-сборки), NO — production (App Store / prod-сборки).
// Должно совпадать с типом device token, который регистрирует клиент.
is_development = YES;
// Обычно не менять: хост APNs sandbox.
api_host_development = "api.sandbox.push.apple.com";
// Обычно не менять: хост APNs production.
api_host_production = "api.push.apple.com";
};
// --- Android (Firebase Cloud Messaging HTTP v1 API) ---
// Блок можно опустить целиком, если Android-приложение не используется.
FCMServiceData = {
// Скопировать из JSON Firebase как есть.
type = service_account;
// ОБЯЗАТЕЛЬНО: ID Firebase-проекта (используется в URL отправки FCM v1).
project_id = my-firebase-project;
// ОБЯЗАТЕЛЬНО: идентификатор приватного ключа из JSON сервисного аккаунта.
private_key_id = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
// ОБЯЗАТЕЛЬНО: приватный ключ из JSON; вставить как одну строку с \n.
private_key = "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n";
// ОБЯЗАТЕЛЬНО: e-mail сервисного аккаунта из JSON (firebase-adminsdk-…@….iam.gserviceaccount.com).
client_email = "firebase-adminsdk-aaaaa@my-firebase-project.iam.gserviceaccount.com";
// Скопировать из JSON Firebase как есть.
client_id = "123456789012345678901";
// Скопировать из JSON Firebase как есть (стандартный URL Google OAuth).
auth_uri = "https://accounts.google.com/o/oauth2/auth";
// Скопировать из JSON Firebase как есть (стандартный URL; обязателен для проверки настроек).
token_uri = "https://oauth2.googleapis.com/token";
// Скопировать из JSON Firebase как есть.
auth_provider_x509_cert_url = "https://www.googleapis.com/oauth2/v1/certs";
// Скопировать из JSON Firebase как есть (URL должен соответствовать client_email).
client_x509_cert_url = "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-aaaaa%40my-firebase-project.iam.gserviceaccount.com";
// Скопировать из JSON Firebase как есть.
universe_domain = "googleapis.com";
};
}Файл должен называться pushparams-cgp.settings и быть загружен в PBXApps.
Обновление с более ранних версий
Важно при обновлении до 6.5.6
Настройки перенесены из WebSkins/pushparams-<app>.objdata в PBXApps/pushparams-<app>.settings. Старые файлы в WebSkins сервером не читаются — push перестанут работать до миграции.
При обновлении с версий до 6.5.3:
- Android: замените ключ
FCMKey(устаревший server key) на блокFCMServiceData(сервисный аккаунт Firebase) и добавьтеSettingsScript = pushprepare.scgp. - iOS: замените
APNsKey/APNsCertна блокAPNsServiceData.
Ключ FCMBearerToken вручную указывать не нужно — его получает и кэширует скрипт pushprepare.scgp.
Диагностика
При проблемах с push проверьте:
- Файл
pushparams-<appName>.settingsзагружен в правильную Среду PBXApps (доменную или общесерверную). - Имя приложения в файле совпадает с
appNameв DeviceTokens пользователя. - Нужное событие указано в
EventSubscription. - Скрипт
pushprepare.scgpприсутствует в WebSkins. - Для iOS:
is_developmentсоответствует типу сборки клиента;bundle_idсовпадает с приложением. - Для Android: сервисный аккаунт Firebase имеет права на отправку сообщений (Firebase Cloud Messaging API).
Сообщения об ошибках аутентификации записываются в Системный Журнал с пометками pushprepare и PushHandler.