8

私はUNNotificationServiceExtensionSwiftで書いています。それがするすべて:

  • 通知のタイトルを設定する
  • 通知本文を設定する
  • 画像を読み込んで呼び出す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 つも見つかりませんでした

誰もこの問題に直面しましたか? 回避策はありますか?考え?

4

1 に答える 1