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

Apple вводит новые расширения с именами "UNNotificationServiceExtension", но как запустить его из push-уведомлений?

Я читал, что расширение службы обеспечивает сквозное шифрование для полезной нагрузки.

Какой ключ требуется для установки полезных данных push-уведомлений?

Как определить полезную нагрузку и как запустить расширение сервиса из push-уведомлений?

1 ответ

Решение

Позвольте мне сделать это шаг за шагом.

UNNotificationServiceExtension - Что это такое?

UNNotificationServiceExtension - это цель расширения приложения, которую вы связываете вместе со своим приложением с целью изменения push-уведомлений по мере их поступления на устройство перед его передачей пользователю. Вы можете изменить заголовок, подзаголовок, текст и дополнительно добавить вложения к push-уведомлению, либо загрузив его, либо воспользовавшись одним из комплектных приложений.

Как создать

Перейдите в Файл -> Создать -> Цель -> Расширение службы уведомлений и заполните детали

Какой ключ требуется для установки полезных данных push-уведомлений?

Вам нужно установить mutable-content флаг для 1 запустить расширение службы. Кроме того, если content-available установлен в 1 расширение службы не будет работать. Поэтому либо не устанавливайте его, либо устанавливайте на 0. (Редактировать: это не применимо. Вы можете установить или отменить content-available флаг)

Как определить полезную нагрузку и как запустить расширение сервиса из push-уведомлений?

Создайте расширение, а затем соберите и запустите ваше приложение. Отправить push-уведомление с mutable-content установлен в 1,

Код

UNNotificationService предоставляет две функции:

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request
               withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler;

- (void)serviceExtensionTimeWillExpire;

Первая функция срабатывает, когда push-уведомление принимается на устройстве и до того, как оно будет представлено пользователю. Ваш код внутри функции имеет возможность изменять содержимое push-уведомлений внутри этой функции.

Вы делаете это, изменяя bestAttemptContent свойство вашего расширения, которое является экземпляром UNNotificationContent и имеет свойства: title, subtitle, body, attachments и т.п.

Первоначальная полезная нагрузка удаленного уведомления доставляется через request.content свойство параметра функции request,

Наконец, вы отправляете ваш bestAttemptContent с помощью contentHandler:

self.contentHandler(self.bestAttemptContent); 

У вас есть ограниченное время, чтобы сделать свои вещи в первом методе. В случае, если время истекает, ваш второй метод вызывается с наилучшей попыткой вашего кода.

Образец кода

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request
               withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];

    // Modify the notification content here...
    self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
    self.contentHandler(self.bestAttemptContent);
}

Приведенный выше код добавляет [измененный] к исходному заголовку в полезной нагрузке PN.

Образец полезной нагрузки

{
    "aps": {
        "alert": {
            "title": "Hello",
            "body": "body.."
        },
        "mutable-content":1,
        "sound": "default",
        "badge": 1,

    },
  "attachment-url": ""
}

Обратите внимание, что attachment-url ключ - это пользовательский ключ для ваших собственных задач, не распознаваемый iOS .

Расширение службы уведомлений очень полезно для загрузки контента из данных уведомлений и отображения в уведомлениях, таких как изображения и другой контент. Вы также можете использовать расширение службы уведомлений для выполнения некоторого кода, когда приложение находится в фоновом режиме или неактивно (убито).

Вот пошаговое руководство по использованию расширения службы уведомлений. А также вы получили демо от GitHub.

Другие вопросы по тегам