# Мобильный пуш-карусель

Как сделать мобильный пуш в виде карусели с товарами.

Демонстрация пуша-карусели

# iOS

# Настройка сервиса

# Notification Service Extension

Расширение NotificationServiceExtension позволит вашему приложению получать и отображать расширенные мобильные пуши с изображениями, кнопками и счетчиками.

Выполните следующие шаги в XCode в открытом проекте:

  1. В меню File выберите New => Target....

  1. В появившемся списке шаблонов выберите Notification Service Extension и нажмите Next.

  1. Укажите название продукта как NotificationServiceExtension и нажмите Finish. Не выбирайте Activate в следующем диалоге. Нажмите Cancel.

  1. В навигаторе проекта кликните на папку NotificationServiceExtension, откройте файл NotificationService.swift и замените его содержимое полностью на это:
import UserNotifications

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var receivedRequest: UNNotificationRequest!
    var bestAttemptContent: UNMutableNotificationContent?
    
    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.receivedRequest = request;
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
        
        if let bestAttemptContent = bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }
    
    override func serviceExtensionTimeWillExpire() {
        if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }
}

# Добавление возможностей для расширенного пуша

На этом шаге проверяем, что приложение может получать внешние push-уведомления. Убедитесь, что вы выполняете эти действия на основном таргете приложения, а не в Notification Service Extension.

  1. Выберите корневой проект, затем главный таргет и в нем вкладку Signing & Capabilities

  2. В ней найдите вкладку All и в секции Background Modes включите чекбокс Remote notifications.

  1. Слева в списке таргетов появится пункт с Push Notifications. Если этого не произошло, нажмите [+ Capability] и в появившемся окне найдите и добавьте пункт Push Notifications.

# Включение отображения пуша-карусели

# Установите расширение контента уведомления

Выполните следующие шаги в XCode в открытом проекте:

  1. В меню File выберите New => Target....

  1. В появившемся списке шаблонов выберите Notification Content Extension и нажмите Next.

  1. Укажите название продукта как NotificationContentExtension и нажмите Finish. Нажмите Activate в следующем диалоге.

# Скачайте код

Скачайте содержимое этой директории (opens new window) и замените им содержимое папки NotificationContentExtension в вашем проекте.

# Установите категорию пуш-уведомления

В файле AppDelegate.swift в метод didFinishLaunchingWithOptions добавьте следующий код для активации пуша-карусели:

let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.badge, .alert, .sound]) { _, _ in }
UIApplication.shared.registerForRemoteNotifications()
let options: UNAuthorizationOptions = [.alert]
UNUserNotificationCenter.current().requestAuthorization(options: options) { authorized, _ in
    if authorized {
        let categoryIdentifier = "carousel"
        let carouselNext = UNNotificationAction(identifier: "carousel.next", title: "След", options: [])
        let carouselPrevious = UNNotificationAction(identifier: "carousel.previous", title: "Пред", options: [])

        let carouselCategory = UNNotificationCategory(identifier: categoryIdentifier, actions: [carouselNext, carouselPrevious], intentIdentifiers: [], options: [])
        UNUserNotificationCenter.current().setNotificationCategories([carouselCategory])
    }
}

# Как отправлять

Об отправке пуша-карусели читайте в руководстве маркетолога.