Перейти к содержанию

API схем Live Activity

Схема Live Activity — это JSON-схема для одного типа ActivityAttributes в вашем приложении (например, FlightAttributes), охватывающая обе половины карточки: поля ContentState, которые изменяются во время выполнения активности, и поля, зафиксированные на весь ее жизненный цикл. Опубликуйте схему, чтобы элемент Live Activity в Journey мог создавать именованные поля для обеих половин на ее основе, а не с помощью простого редактора JSON и произвольного списка полей. Карточка и ее макет по-прежнему создаются в коде вашего приложения. Схема описывает только данные, которые заполняются в Journey.

Этот API предназначен для разработчиков, интегрирующих Live Activities. Информацию о запуске и обновлении самих активностей см. в API iOS Live Activities.

Написание схемы

Anchor link to

attributesType — это имя типа Swift, который соответствует ActivityAttributes в вашем приложении. Pushwoosh не читает ваш код и не проверяет имя на соответствие — это просто строка, которую хранит API, и строка, которую вы передаете в поле attributes-type метода startLiveActivity.

jsonSchema охватывает обе половины этого типа, в двух отдельных местах:

  • Поля ContentState — те, что изменяются во время выполнения активности, например, номер выхода на посадку, статус или предполагаемое время прибытия рейса, — указываются в корневом properties схемы.
  • Поля ActivityAttributes — зафиксированные на весь жизненный цикл активности и устанавливаемые один раз при ее запуске, например, номер рейса, — указываются в отдельном разделе attributes, с собственным properties и необязательным списком required.

Раздел attributes необязателен. Без него поля ActivityAttributes остаются свободным списком имя/значение поля на элементе Live Activity, а не именованными полями. Фактические значения атрибутов вы всегда передаете через live_activity.attributes в методе startLiveActivity — схема лишь объявляет их имена, типы и то, какие из них обязательны.

Пример

Anchor link to
struct FlightAttributes: ActivityAttributes {
struct ContentState: Codable, Hashable {
var gate: String
var status: String
var estimatedTime: String
}
var flightNumber: String
}

flightNumber находится в ActivityAttributes. gate, status и estimatedTime находятся в ContentState. Опубликуйте обе половины как схему для attributesType: "FlightAttributes":

{
"type": "object",
"properties": {
"gate": { "type": "string" },
"status": { "type": "string" },
"estimatedTime": { "type": "string" }
},
"attributes": {
"properties": {
"flightNumber": { "type": "string" }
},
"required": ["flightNumber"]
}
}

required внутри attributes делает flightNumber обязательным на шаге Start элемента Live Activity: оставить его пустым там нельзя. У корневого properties для полей ContentState такого списка нет. Заполнять gate, status или estimatedTime в Journey никогда не обязательно.

После публикации элемент Live Activity в Journey считывает эту форму, чтобы предложить именованные поля для gate, status и estimatedTime в Card content вместо простого редактора content-state. То же самое происходит для flightNumber в Card attributes вместо свободного списка имя/значение поля.

См. Соглашения ниже для ознакомления с правилами формата и неизменяемости, которые применяются к jsonSchema, и Управление схемами в Панели управления в конце этой страницы для выполнения тех же действий без прямого вызова API.

Базовый URL

Anchor link to
https://rpc-api.svc-nue.pushwoosh.com

Аутентификация

Anchor link to

Каждый запрос должен содержать заголовок Authorization с вашим токеном Server API:

Authorization: Api YOUR_API_TOKEN

Соглашения

Anchor link to
  • Именование полей асимметрично. Запросы принимают как lowerCamelCase, так и имя proto. Ответы всегда возвращаются с именами полей proto в snake_case (attributes_type, json_schema) — в примерах ниже используется этот регистр.
  • Версии неизменяемы. Опубликованную версию нельзя редактировать — метод Update отсутствует. Повторная публикация с теми же attributesType и version завершится ошибкой AlreadyExists. Изменение виджета всегда означает новую версию. Опустите version при Create, чтобы опубликовать следующую свободную версию для этого attributesType.
  • Формат jsonSchema: должен быть объектом JSON с "type": "object", размером до 64 КБ. null, число, простая строка или объект без "type": "object" будут отклонены, поскольку для формы, которую создает Pushwoosh, требуются именованные поля, которые есть только в схеме объекта. Необязательный раздел attributes, если он присутствует, сам должен быть объектом с собственным properties и, опционально, массивом required, который называет только поля, объявленные в attributes.properties. Имя поля не может присутствовать одновременно в properties и в attributes.properties.

Эндпоинты

Anchor link to
MethodPathDescription
GET/api/live_activity_schemasПолучить список схем приложения
GET/api/live_activity_schemas/{attributesType}/{version}Получить одну версию схемы
POST/api/live_activity_schemasОпубликовать новую версию схемы
DELETE/api/live_activity_schemas/{attributesType}/{version}Удалить версию схемы

List (Получение списка)

Anchor link to

Возвращает список всех attributesType, для которых приложение опубликовало схемы, со всеми их версиями, начиная с самой новой.

GET /api/live_activity_schemas

Параметры запроса

Anchor link to
ParameterTypeRequiredDescription
applicationstringYesКод приложения, для которого нужно получить список схем.
attributesTypestringNoОграничить список одним типом ActivityAttributes.
Пример ответа
Anchor link to
{
"schemas": [
{
"application": "XXXXX-XXXXX",
"attributes_type": "FlightAttributes",
"version": 2,
"json_schema": "{\"type\":\"object\",\"properties\":{\"gate\":{\"type\":\"string\"}},\"attributes\":{\"properties\":{\"flightNumber\":{\"type\":\"string\"}},\"required\":[\"flightNumber\"]}}",
"created": "2026-09-01T10:00:00Z",
"updated": "2026-09-01T10:00:00Z"
},
{
"application": "XXXXX-XXXXX",
"attributes_type": "FlightAttributes",
"version": 1,
"json_schema": "{\"type\":\"object\",\"properties\":{\"gate\":{\"type\":\"string\"},\"status\":{\"type\":\"string\"}}}",
"created": "2026-08-15T10:00:00Z",
"updated": "2026-08-15T10:00:00Z"
}
]
}

Get (Получение)

Anchor link to

Возвращает одну версию схемы.

GET /api/live_activity_schemas/{attributesType}/{version}

Параметры пути

Anchor link to
ParameterTypeRequiredDescription
attributesTypestringYesИмя типа ActivityAttributes.
versionintegerYesВерсия схемы.

Параметры запроса

Anchor link to
ParameterTypeRequiredDescription
applicationstringYesКод приложения, которому принадлежит схема.

Ответ

Anchor link to

Возвращает { "schema": { ... } }, объект схемы, показанный в разделе List выше.

Create (Создание)

Anchor link to

Публикует новую версию схемы для attributesType. Возвращает созданную схему, включая присвоенную ей версию.

POST /api/live_activity_schemas

Тело запроса

Anchor link to
ParameterTypeRequiredDescription
applicationstringYesКод приложения, в котором публикуется схема.
attributesTypestringYesИмя типа ActivityAttributes, объявленного в вашем приложении.
jsonSchemastringYesJSON-схема полей ContentState и attributes. См. Написание схемы выше.
versionintegerNoВерсия для публикации. Опустите, чтобы получить следующую свободную версию для этого attributesType.
Пример запроса
Anchor link to
{
"application": "XXXXX-XXXXX",
"attributesType": "FlightAttributes",
"jsonSchema": "{\"type\":\"object\",\"properties\":{\"gate\":{\"type\":\"string\"},\"status\":{\"type\":\"string\"}},\"attributes\":{\"properties\":{\"flightNumber\":{\"type\":\"string\"}},\"required\":[\"flightNumber\"]}}"
}

Ответ

Anchor link to

Возвращает { "schema": { ... } }, объект созданной схемы.

Delete (Удаление)

Anchor link to

Безвозвратно удаляет одну версию схемы.

DELETE /api/live_activity_schemas/{attributesType}/{version}

Параметры пути

Anchor link to
ParameterTypeRequiredDescription
attributesTypestringYesИмя типа ActivityAttributes.
versionintegerYesВерсия схемы для удаления.

Параметры запроса

Anchor link to
ParameterTypeRequiredDescription
applicationstringYesКод приложения, которому принадлежит схема.

Ответ

Anchor link to

В случае успеха возвращает пустой объект.

Ответы об ошибках

Anchor link to
HTTP statusMeaning
400 Bad RequestНедопустимый аргумент: отсутствует обязательное поле, jsonSchema не соответствует правилу формата, указанному выше (включая недействительный раздел attributes), или jsonSchema превышает 64 КБ.
401 UnauthorizedОтсутствует или недействителен заголовок Authorization.
403 ForbiddenПриложение не принадлежит учетной записи вызывающей стороны.
404 Not FoundПриложение или пара attributesType/version не найдены.
409 ConflictCreate был вызван с парой attributesType/version, которая уже существует (AlreadyExists при передаче).
500 Internal Server ErrorНеожиданный сбой на стороне сервера.

Управление схемами в Панели управления

Anchor link to

Панель управления предлагает те же действия, что и API, без прямого вызова: получение списка версий по типу, публикация новой версии, просмотр JSON версии и удаление версии (с подтверждением, поскольку удаление является безвозвратным). Путь для выполнения этих действий см. в разделе Конфигурация схем iOS Live Activity.