# Создание интерактивных push-уведомлений для iOS

В iOS 8 появились интерактивные уведомления, позволяющие пользователям выполнять действия прямо из баннера уведомления. Pushwoosh теперь предлагает **iOS Categories**, которые позволяют создавать кастомные кнопки в панели управления Pushwoosh. [Узнать больше](/ru/product/messaging-channels/push-notifications/advanced-push-features/ios-interactive-push)

## API

Когда ваше приложение вызывает [`registerDevice`](/ru/developer/api-reference/device-api/#registerdevice), Pushwoosh API возвращает ответ, содержащий список доступных категорий (Categories) с их ID и деталями для каждой кнопки, как показано ниже:

```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "iosCategories": [
      {
        "categoryId": 65,
        "buttons": [
          {
            "id": 0,
            "label": "Rate",
            "type": "1",
            "startApplication": 1
          },
          {
            "id": 1,
            "label": "Later",
            "type": "0",
            "startApplication": 0
          }
        ]
      }
    ]
  }
}
```

Эти категории (Categories) теперь доступны на устройстве, поэтому они могут быть корректно отображены, когда приходит сообщение, а ваше приложение не запущено на переднем плане.

Чтобы отправить push-уведомление с категорией из Pushwoosh Journey, просто выберите ее в настройках платформы iOS при составлении сообщения. Если вы отправляете push-уведомления удаленно через Pushwoosh API, в запросах [`createMessage`](/ru/developer/api-reference/messages-api/#createmessage) следует использовать параметр `ios_category` с соответствующим ID категории в качестве значения:

```
{
  "categoryId": 65  // Необязательно. Строковое значение. ID категории iOS8 из Pushwoosh
}
```

Когда приходит push-уведомление, содержащее ID категории, Pushwoosh SDK отображает уведомление с набором кнопок, которые содержит эта категория.

## Кнопки и действия в Pushwoosh iOS SDK

Чтобы выполнять различные действия при открытии приложения, вам следует создать кастомную реализацию `UNUserNotificationCenterDelegate` и переопределить ее метод `didReceiveNotificationResponse`:

#### CustomDelegate


```swift
class CustomDelegate: NSObject, UNUserNotificationCenterDelegate {
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        let identifier = response.actionIdentifier
        let category = response.notification.request.content.categoryIdentifier

        if category == "10212" {
            if identifier == "1" {
                // ВЫПОЛНИТЬ ДЕЙСТВИЕ
            } else {
                // ВЫПОЛНИТЬ ДРУГОЕ ДЕЙСТВИЕ
            }
        }

        completionHandler()
    }
}
```

Где `identifier` — это ID кнопки, а `category` извлекается из полезной нагрузки уведомления.

Затем создайте экземпляр этого класса и передайте его в Pushwoosh SDK с помощью прокси-метода:

#### AppDelegate

```swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    Pushwoosh.configure.registerForPushNotifications()

    let customDelegate = CustomDelegate()
    Pushwoosh.configure.addNotificationCenterDelegate(customDelegate)

    return true
}
```

<img src="/messaging-channels-ios-interactive-push-1.png" alt="Интерактивное push-уведомление для iOS с кастомными кнопками действий, отображаемыми в баннере уведомления"/>