UNNotificationServiceExtension не может обновлять уведомления время от времени

У меня есть UNNotificationServiceExtension написано в Swift. Все это делает:

  • Установить заголовок уведомления
  • Установить тело уведомления
  • Загрузить изображение и позвонить contentHandler ()

Вот краткая версия того, что я делаю:

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

    bestAttemptContent!.title = GetNotificationTitle(userInfo)
    bestAttemptContent!.body = GetNotificationBody(userInfo)

    if let imageUrl = <get image url> {
        let imageLoaderTask = URLSession.shared.dataTask(with: URL.init(string: imageUrl)!) { (newsImageData, newsImageUrl, newsImageError) -> Void in
            if newsImageError == nil && newsImageData != nil {
                let documentDirectory = self.GetDocumentDirectory()
                if documentDirectory != nil {
                    let newsFileURL = documentDirectory?.appendingPathComponent("news_image").appendingPathExtension("png")
                    do {
                        try newsImageData?.write(to: newsFileURL!)
                        let attachment = try UNNotificationAttachment(identifier: "newsImage",
                                                                      url: newsFileURL!,
                                                                      options: nil)
                        self.bestAttemptContent?.attachments = [ attachment, ]
                        self.contentHandler!(self.bestAttemptContent!)
                        return
                    } catch {}
                }
            }
            self.contentHandler!(self.bestAttemptContent!)
        }
        imageLoaderTask.resume()
    } else {
        self.contentHandler!(self.bestAttemptContent!)
    }
}

В 95% случаев - работает просто отлично. Тем не менее, иногда уведомление приходит без каких-либо изменений (т. Е. Заголовок, текст остался прежним, изображение не было прикреплено).

Я знаю это:

  • Это не тайм-аут serviceExtensionTimeWillExpire не называется
  • Это не похоже UNNotificationServiceExtension вылетает: я добавил много NSLog() звонки для проверки журналов устройства - self.contentHandler!(self.bestAttemptContent!)пожары
  • Это происходит чаще на моем iPhone, чем на iPad
  • Я не нашел ни единой подсказки в журналах устройств относительно этой проблемы.

Кто-нибудь сталкивался с этой проблемой? Есть обходные пути? Мысли?

1 ответ

Я построил UNNotificationServiceExtension когда функция была впервые объявлена. Две идеи:

  1. Основной URLSession задача данных не может получить удаленный носитель из-за системной проблемы. Возьмите sysdiagnose и найдите ошибки в libnetwork.dylib.

  2. Расширение службы - это отдельный отдельный двоичный файл и процесс. Возможно, система не запустила процесс или не смогла открыть связь между процессом приложения и расширением службы. Я также проверил бы sysdaignose для всего, что говорит порт Маха процесса nil,

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