Что нового

  • С версии 5.2 для Pusher'а не требуется БД.
  • Поддержка отправки на устройства Huawei.

Аутентификационные данные и шаблоны пушей

Аутентификационные данные и шаблоны для отправки пушей на приложения PC зашиты в модуль сервера. Таким образом, для типового использования с приложением PC конфигурирование модуля не требуется.

Состояния отправленных пушей

Состояния отправленных пушей хранится в памяти модуля сервера. Размер кольцевого буфера для хранения статусов пушей равен 1000. Место пуша в очереди не меняется от момента создания.

Конфигурирование

В параметры конфигурации входит:

  • общие параметры модуля;
  • аутентификационные данные для приложения (дифференцируются по application/bundle id);
  • шаблоны для прикладных систем (дифференцируются по systemid).

Поиск параметров конфигурации осуществляются в следующих директориях последовательно, до нахождения первой из перечисленных:

 - /opt/wildfly/pc_pusher
 - /opt/pc/pc_pusher
 - C:\\pc\\pc_pusher
 - C:\\wildfly\\pc_pusher

Структура директории

.
├── apps
│   ├── com.example.corp.dev.json
│   ├── com.example.cort.json
│   ├── com.example.retail.dev.json
│   └── com.example.retail.json
├── systems
│   └── 3550fa38-5d17-4fbf-a660-506227a2ed0e.json
└── pusher.conf.json

Общие параметры

Свойство Описание
debug_info Включение вывода отладочной информации.
proxy Параметры для подключения через прокси.
notification_status_buffer_size Размер очереди для хранения статусов транзакций.
core_size Первоначальное количество воркеров.
queue_size Если до этого значения вырастает очередь, то количество воркеров увеличивается до max_core_size.
max_core_size Максимальное количество воркеров. Если очередь заполнилась максимально, то возвращается Exception "TASKS_QUEUE_IS_FULL" (HTTP 400, PC_Error 313).
performance_log При включении debug_info, то в этом случае запустится демон-процесс, который с периодом performance_log_period будет подсчитывать производительность пушера и выводить результаты в лог.

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

Приведённые значения установлены по-умолчанию

{
  "debug_info": false,
  "notification_status_buffer_size": 1000,
  "proxy": {
    "host": null,
    "port": 3128,
    "username": null,
    "password": null
  },
  "push_tasks_pool": {
    "core_size": 5,
    "max_core_size": 50,
    "queue_size":500
  },
  "performance_log": false,
  "performance_log_period": 1000
}

Аутентификационные данные для приложений

Аутентификационные данные для отправки push-уведомлений в приложения задаются в файлах с именем %app_id%.json в директории apps (где %app_id% — application/bundle ID).

Для iOS достаточно только одного из перечисленных вариантов аутентификации (p8/p12/firebase).

Пример файла с аутентификационными данными:

{
    "android": {
        "google_api_key": "AAAAoZ7vyz4:APA91bFqLfNe... ...DbKBCGCXk"
    },
    "ios": {
        "apns_p8": {
            "use_dev_gate": false,
            "apns_key_id": "JVBQX52N5Z",
            "apns_team_id": "48HZH4RWJD",
            "apns_key": "-----BEGIN PRIVATE KEY-----\nMIGTAgEAMBMGByqGSM49AgE... ...tRHxUI6\n-----END PRIVATE KEY-----"
        },
        "apns_p12": {
            "use_dev_gate": false,
            "p12_file": "/opt/pc/apns_keyfile.p12",
            "p12_pass": "Pa$$w0rd"
        },
        "firebase": {
            "google_api_key": "AAAAoZ7vyz4:APA91bFqLfNe... ...DbKBCGCXk"
        }
    },
    "huawei": {
        "client_secret": "0a5be... ...f04bec3a",
        "client_id": "10... ...79"
    }
}

Шаблоны push-уведомлений

Шаблоны push-уведомлений в приложения задаются в файлах с именем %systemid%.json, либо default.json в директории systems. Приоритет имеет файл с указанным SystemID. Пример файла с шаблонами:

{
  "android": {
    "templates": {
      "transaction": [
        {
          "to": "%DEVICE_TOKEN%",
          "notification": {
            "tag": "%USER_ID%",
            "title": "PayControl",
            "body": "Новая операция для подтверждения",
            "icon": "paycontrol_push",
            "sound": "default"
          },
          "data": {
            "type": "PayControl_v2"
          }
        },
        {
          "to": "%DEVICE_TOKEN%",
          "data": {
            "type": "PayControl_v2",
            "userid": "%USER_ID%",
            "transactionid": "%TRANSACTION_ID%"
          }
        }
      ]
    }
  },
  "ios": {
    "use_dev_gate": false,
    "templates": {
      "transaction": [
        {
          "aps": {
            "alert": "Новая операция для подтверждения",
            "sound": "default",
            "badge": 1,
            "mutable-content": 1,
            "category": "NEW_OPERATION"
          },
          "type": "PayControl",
          "userid": "%USER_ID%",
          "transactionid": "%TRANSACTION_ID%",
          "pc_notification_type": "alert",
          "pc_notification_priority": 10,
          "pc_notification_timeout": 600,
          "pc_collapse_id": "%USER_ID%"
        }
      ]
    }
  },
  "huawei": {
    "templates": {
      "transaction": [
        {
          "validate_only": false,
          "message": {
            "android": {
              "notification": {
                "tag": "%USER_ID%",
                "title": "PayControl",
                "body": "Новая операция для подтверждения",
                "icon": "paycontrol_push",
                "click_action": {
                  "type": 3
                }
              }
            },
            "token": [
              "%DEVICE_TOKEN%"
            ]
          }
        },
        {
          "validate_only": false,
          "message": {
            "android": {
              "collapse_key": -1,
              "urgency": "HIGH",
              "ttl": "86400",
              "data": "{\"type\": \"PayControl_v2\",\n\"userid\": \"%USER_ID%\",\"transactionid\": \"%TRANSACTION_ID%\"}"
            },
            "token": [
              "%DEVICE_TOKEN%"
            ]
          }
        }
      ]
    }
  }
}