Push-уведомление не проходит через UNNotificationServiceExtension, если вы выключаете устройство - PullRequest
0 голосов
/ 21 февраля 2019

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

Шаги для воспроизведения:

  1. Выключение устройства
  2. Отправка push-уведомления на устройство
  3. Включение устройства
  4. Push-уведомлениеприходит, когда устройство подключено к Wi-Fi / сотовой связи

Результат: Push-уведомление не проходит через UNNotificationServiceExtension, которое изменяет содержимое заголовка и тела.Это происходит, только если я запускаю приложение хоста до того, как я подключусь к Wi-Fi / сотовой связи.

Ожидается: Push-уведомление всегда должно проходить через UNNotificationServiceExtension.

Это ожидаемое поведение?Разве нет гарантии, что push-уведомления всегда проходят через UNNotificationServiceExtension?

Вот мой код для реализации UNNotificationServiceExtension:

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

        guard let bestAttemptContent = bestAttemptContent else { return }

        bestAttemptContent.title = "title has been modified by extension"
        bestAttemptContent.body = "body has been modified by extension"

        contentHandler(bestAttemptContent)
    }

    override func serviceExtensionTimeWillExpire() {
        // Called just before the extension will be terminated by the system.
        // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
        if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
        contentHandler(bestAttemptContent)
        }
    }
}

и моя полезная нагрузка:

{
  "aps": {
    "alert": {
      "body": "my body",
      "title": "my title"
    },
    "content-available": 1,
    "mutable-content": 1
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...