私は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!)
- iPadよりもiPhoneで頻繁に発生します
- この問題に関するデバイス ログには、手がかりが 1 つも見つかりませんでした
誰もこの問題に直面しましたか? 回避策はありますか?考え?