Подтвердить что ты не робот

IOS 10 не вызывают расширение службы уведомлений

Я попытался внедрить новое расширение службы уведомлений, но у меня есть проблема.

В моем файле NotificationService.swift у меня есть этот код:

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)

    if let bestAttemptContent = bestAttemptContent {
        // Modify the notification content here...
        bestAttemptContent.title = "\(bestAttemptContent.title) [modified]"

        print(bestAttemptContent.body)

        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)
    }
}
}

Когда я получил push-уведомление, метод didReceive (_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) → Void) никогда не вызывался.

Возможно, я неправильно понял, как это расширение работает?

4b9b3361

Ответ 1

Проверьте цель развертывания в службе расширения.

У меня установлен целевой показатель развертывания до 10.2 при тестировании на устройстве с 10.1, а расширение не было вызвано до тех пор, пока я не изменил его.

Другая проблема может заключаться в отладке. Чтобы заставить ее работать, вам необходимо прикрепить процесс расширения службы. В меню Xcode Отладкa > Присоединить к процессу > Имя вашего расширения

Ответ 2

  1. Вместо того, чтобы запустить приложение. Вы должны запустить расширение службы в качестве цели. Затем он спросит, для какого приложения вы запустили расширение службы, затем выберите приложение и отправит уведомление.

  2. Убедитесь, что цель развертывания меньше, чем ОС устройства в расширении службы.

  3. Убедитесь, что полезная нагрузка должна содержать "изменяемый контент": 1.

    {"aps" : {
            "alert" : {
                "title" : "Introduction To Notification",
                "subtitle" : "Session 707",
                "body" : "New Notification Look Amazing"
            },
           "sound" : "default",
            "category" : "message",
            "badge" : 1,
            "mutable-content": 1
        },
        "attachment-url": "https://api.buienradar.nl/Image/1.0/RadarMapNL"
    }
    
  4. Не добавляйте флаг "Содержимое доступно" в aps, если необходимо добавить значение 0. "Содержимое доступно": 0,

Ответ 3

Полезная нагрузка push-сообщения должна содержать пару ключей с переменным содержимым: 1.

Словарь aps для удаленных уведомлений включает в себя ключ изменяемого содержимого со значением, установленным в 1.

Ex полезной нагрузки push-сообщения JSON:

{
  "aps":{
          "alert": {
                    "body": "My Push Notification", 
                    "title" : "Notification title"},
          "mutable-content" : 1,
          "badge":0},
}

Это работает отлично, и я получаю уведомление Push следующим образом: Push Notification

Также обратите внимание:

Вы не можете изменять тихие уведомления или те, которые воспроизводят звук или значок значка приложений.

Вы можете попробовать Pusher или Houston для тестирования Push-сообщений.

Ответ 4

Я сошел с ума. Наконец, я понял, что deployment target Notification Service Extension был 10.3 (мой телефон тоже). Я изменился на 10.2 и отлично работает

Ответ 5

У меня та же проблема, но моей проблемой было расширение уведомлений "приложение". Должно быть приложение

Ответ 6

вам нужно добавить "mutable-content": 1 к вашей полезной нагрузке