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

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

В iOS 8 были представлены интерактивные уведомления, позволяющие пользователям выполнять действия прямо из баннера уведомления. Теперь Pushwoosh предлагает Категории iOS, которые позволяют создавать кастомные кнопки в Панели управления Pushwoosh. Узнать больше

Когда ваше приложение вызывает registerDevice, API Pushwoosh возвращает ответ, содержащий список доступных Категорий с их идентификаторами и деталями для каждой кнопки в следующем формате:

{
"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
}
]
}
]
}
}

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

Чтобы отправить push-уведомление с категорией из Customer Journey в Pushwoosh, просто выберите ее в настройках платформы iOS при составлении сообщения. Если вы отправляете push-уведомления удаленно через API Pushwoosh, в запросах createMessage следует использовать параметр ios_category с соответствующим ID Категории в качестве значения:

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

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

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

Anchor link to

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

CustomDelegate

Anchor link to
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 извлекается из полезной нагрузки (payload) уведомления.

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

AppDelegate

Anchor link to
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
Pushwoosh.sharedInstance().registerForPushNotifications()
let customDelegate = CustomDelegate()
Pushwoosh.sharedInstance().notificationCenterDelegateProxy?.add(customDelegate)
return true
}