Сервисное расширение Notificaton не работает

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

Ниже мой код для расширения услуг

import UserNotifications

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

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

изменить 1: ниже моя полезная нагрузка

{  
   "aps":{  
      "sound":"default",
      "mutable-content": 1,
      "category": "myCategory",
      "alert":{  
         "body":"this is a custom push",
         "subtitle":"subtitle of the push",
         "title":"Push Test"
      }

   }
}

edit 1: проблема, кажется, на том конкретном устройстве, работающем на 10.2.1, я проверил с другим устройством, работающим на 10.2, оно запускает расширение службы уведомлений.

7 ответов

Решение

Наконец я смог решить проблему. Я не уверен, что вызвало проблему, но после некоторых экспериментов я понял, что не только мое служебное расширение, но и все служебное расширение всех других установленных приложений не работало, и при отправке полезной нагрузки с "mutable-content: 1" уведомление не отображалось. После перезагрузки устройства оно заработало нормально, я использовал iPhone 6s.

Цель развертывания вашего NotificationServiceExtension также может быть причиной.

В моем случае я тестировал устройство под управлением iOS 12.4, в то время как целевая версия моего NotificationServiceExtension была 14.1. Я просто изменил свою целевую версию NotificationServiceExtension на 12.4. Она сработала.

В моем случае я удалил расширение и добавил снова. Затем перезагрузите устройство.

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

В моем случае это оказалось моим расширением, использующим слишком много памяти. Console.appтолько показывал, что Springboard убивает приложение с ошибкой вроде:

CMSessionMgr- CMSessionMgrHandleApplicationStateChange: CMSession: отправка команды остановки на _ с pid '_', поскольку клиенту не разрешено воспроизведение в фоновом режиме, И он не продолжает видео AirPlaying, когда устройство блокируется

Я думал, что что-то не так с правами или чем-то в этом роде, но как только я его отладил, я увидел, что iOS убивает процесс из-за того, что он занимает слишком много памяти. Как только я исправил эту ошибку, расширение оставалось активным, пока я не вызвал обратный вызов.

Возможно, это не имеет отношения к общей проблеме, если она существует, но я потратил целый день, пытаясь понять, почемуAppMetricaPush SDK-кампании не приходятTestFlightно успешно выполняется при запуске из Xcode. Для меня это была «продвигающая среда», настроенная не на «производство», а на «разработку»:

вfunc application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)пришлось изменить его на:

      let pushEnvironment = YMPYandexMetricaPushEnvironment.production
YMPYandexMetricaPush.setDeviceTokenFrom(deviceToken, pushEnvironment: pushEnvironment)

Попробуйте устройство в режиме реального времени (iPhone/IPad). это не будет работать для симулятора.

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