Переупаковка уведомлений
Пуш-уведомления для мобильных устройств могут содержать специальные поля или ключи, специфичные для разных платформ. Также у мобильных платформ свои ограничения на размер данных. Правила переупаковки позволяют задать ключи, специфичные для платформы, и переупаковать полезные данные, переданные как payload в методе /v2/send.

Обратите внимание, что правила переупаковки применимы только к данным в формате JSON.


общая структура правил переупаковки
{
  "payload": { "custom_key": custom_value },
  "repack": {
    "push_service_1": {
      "specific_parameter_1": value_1,
      "specific_parameter_2": value_2,
      "repack_payload": [ "custom_key" ]
    },
    "push_service_2": {
      "specific_parameter_1": value_1,
      "specific_parameter_2": value_2,
      "repack_payload": [ "custom_key" ]
    },
    ...
  }
}

Возможные значения для push_service_n: apns, fcm, hms, wns, mpns, other. Все специфичные ключи прокидываются без изменений. В таблице ниже приведён список поддерживаемых платформенно-специфичных ключей (например, значение collapse-id прорастает в заголовок apns-collapse-id).
APNS FCM HMS
  • collapse-id (apns-collapse-id)
  • priority (apns-priority)
  • topic (apns-topic)
  • aps
  • notification
  • restricted_package_name
  • priority
  • collapse_key
  • delay_while_idle
  • notification
  • urgency
  • collapse_key


Значение "other" используется, когда для нескольких платформ переупаковка совпадает. Его нельзя задать, если не задана переупаковка ни для одного пуш-сервиса (в этом случае достаточно послать сразу один корректный payload в нотификации).

Обратите внимание, что после переупаковки в payload остаются только платформенно-специфичные ключи и ключи, перечисленные в массиве repack_payload. Чтобы пробросить все ключи из исходного payload, добавьте специальное wildcard-правило "*" в набор repack_payload (пример см. ниже). Позиция wildcard-правила в массиве значения не имеет.


Использование wildcard-правила (*)
{
"payload": { "event": "new message", "user": "john", "tag": "important" },
"repack": {
  "apns": {
    "aps": {
      "alert": "You have a new message.",
      "content-available": 1
    },
    "repack_payload": ["*", {"e": "event"}]
  }
}
}
{
"aps": {
  "alert": "You have a new message.",
  "content-available": 1
},
"e": "new message",
"user": "john",
"tag": "important"
}

Яркое уведомление (user notification) в APNs
{
  "payload": { "event": "new message", "user": "john" },
  "repack": {
    "apns": {
      "aps": {
        "alert": "You have a new message.",
        "content-available": 1
      },
      "repack_payload": [{"e": "event"}, "user"]
    }
  }
}
{
  "aps": {
    "alert": "You have a new message.",
    "content-available": 1
  },
  "e": "new message",
  "user": "john"
}

Скрытое уведомлениие (silent notification) в APNs
{
  "payload": { "event": "new message", "user": "john" },
  "repack": {
    "apns": {
      "repack_payload": [{"e": "event"}, "user"]
    }
  }
}
{
  "aps": {
    "content-available": 1
  },
  "e": "new message",
  "user": "john"
}

Яркое уведомлениие без полезных данных в APNs
{
  "payload": { "event": "new message", "user": "john" },
  "repack": {
    "apns": {
      "aps": {
        "alert": "You have a new message."
      },
      "repack_payload": []
    }
  }
}
{
  "aps": {
    "alert": "You have a new message."
  }
}

Уведомление в APNs и FCM
{
  "payload": { "event": "new message", "user": "john" },
  "repack": {
    "apns": {
        "aps": {
            "alert": "You have a new message.",
            "content-available": 1
        },
        "repack_payload": [{"e": "event"}, "user"]
    },
    "fcm": {
        "notification": {
            "title": "You have a new message."
        },
        "repack_payload": ["event", "user"]
    }
  }
}
{
  "aps": {
    "alert": "You have a new message.",
    "content-available": 1
  },
  "e": "new message",
  "user": "john"
}
{
  "notification": {
    "title": "You have a new message."
  },
  "data" : {
    "event": "new message",
    "user": "john"
  }
}

Платформы MPNS и WNS предоставляют toast, tile и raw уведомления, а в WNS есть дополнительный тип уведомлений - badge. Массив repack_payload в правилах задает содержимое raw уведомления. Укажите в правилах только те уведомлений, которые нужно послать (например, только toast и raw).

Уведомление в MPNS и WNS
{
  "payload": { "event": "new message", "user": "john" },
  "repack": {
    "mpns": {
        "toast": {
            "text1": "You have a new message.",
            "text2": "More info."
        },
        "tile": {
            "text1": "New message",
            "background": "img",
            "clear": ["text2", "image1"]
        },
        "repack_payload": ["event", "user"]
    },
    "wns": {
        "toast": {
            "visual": {
                "binding": {
                    "template": "ToastImageAndText01",
                    "text": "You have a new message.",
                    "image": "img"
                }
            }
        },
        "tile": {
            "visual": {
            "binding": {
                "template": "TileSquare150x150IconWithBadge",
                "image": "string"
            }
            }
        },
        "badge": "playing",
        "repack_payload": ["event", "user"]
    }
  }
}