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 偶尔无法更新通知的主要内容,如果未能解决你的问题,请参考以下文章