Skip to content

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 (поставляется с сервером).

Общая структура

text
{
  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скопировать из JSONURL сертификатов Google.
client_x509_cert_urlскопировать из JSONURL метаданных сервисного аккаунта (должен соответствовать client_email).
universe_domainскопировать из JSONОбычно googleapis.com.

Пример конфигурации

Пример для приложения с именем cgp:

text
{
  // События сервера, на которые подписано приложение. Пуш уйдёт только если событие
  // есть в этом списке. Список поддерживаемых событий — в 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 проверьте:

  1. Файл pushparams-<appName>.settings загружен в правильную Среду PBXApps (доменную или общесерверную).
  2. Имя приложения в файле совпадает с appName в DeviceTokens пользователя.
  3. Нужное событие указано в EventSubscription.
  4. Скрипт pushprepare.scgp присутствует в WebSkins.
  5. Для iOS: is_development соответствует типу сборки клиента; bundle_id совпадает с приложением.
  6. Для Android: сервисный аккаунт Firebase имеет права на отправку сообщений (Firebase Cloud Messaging API).

Сообщения об ошибках аутентификации записываются в Системный Журнал с пометками pushprepare и PushHandler.