UNNotificationServiceExtension 偶尔无法更新通知

Posted

技术标签:

【中文标题】UNNotificationServiceExtension 偶尔无法更新通知【英文标题】:UNNotificationServiceExtension fails to update notifications occasionally 【发布时间】:2016-10-20 19:27:04 【问题描述】:

我有一个用 Swift 编写的UNNotificationServiceExtension。它所做的一切:

设置通知标题 设置通知正文 加载图片并致电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 上更常见 我在设备日志中没有找到任何关于该问题的线索

有人遇到过这个问题吗?任何解决方法?想法?

【问题讨论】:

面临类似问题。你解决了吗?我认为这是一个 ios 错误。 @DanielRak 不幸的是没有,仍然没有解决,我也怀疑它可能是操作系统错误。请,如果您找到任何解决方案 - 不要犹豫发布它! 绝对!我也没有找到任何可靠的方法来重现它。你知道怎么做吗? @DanielRak 如果你发现了复制步骤 - 也发布它们:-) 我仍然没有看到它背后的任何模式 嘿只是想知道...您使用什么推送通知服务提供商?也许它与payload的交付方式或SDK在应用程序中的集成方式有关? 【参考方案1】:

当该功能首次发布时,我构建了一个UNNotificationServiceExtension。两个想法:

    由于系统问题,底层 URLSession 数据任务无法获取远程媒体。获取 sysdiagnose 并查找 libnetwork.dylib 中的错误。

    服务扩展是它自己独立的二进制和进程。系统可能没有启动该进程,或者无法打开您的应用程序进程和服务扩展之间的链接。我还会检查 sysdaignose 是否有任何表明进程的马赫端口是 nil

【讨论】:

以上是关于UNNotificationServiceExtension 偶尔无法更新通知的主要内容,如果未能解决你的问题,请参考以下文章