gpt4 book ai didi

ios - UNNotificationServiceExtension 不适用于 Firebase Cloud Functions

转载 作者:搜寻专家 更新时间:2023-11-01 07:12:55 33 4
gpt4 key购买 nike

我将 UNNotificationServiceExtension 集成到应用程序中,但我没有图像等附加内容。我还认为我没有正确实现图片加载,因此我尝试更改名称和主体负载以进行测试。但它没有给我任何结果。我通过 Firebase 控制台和 Firebase 云功能实现推送通知。我还阅读了有关此主题的几篇文章,但它们对我没有帮助。请告诉我如何修复它?

class NotificationService: UNNotificationServiceExtension {

var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?


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

if let bestAttemptContent = bestAttemptContent {
// Modify the notification content here...
bestAttemptContent.title = "Apple [modified]"
bestAttemptContent.body = "Xcode"
let attachmentStorage = AttachmentStorage()

if let jpeg = request.content.userInfo["image"] as? String {
guard let url = URL(string: jpeg) else {
contentHandler(bestAttemptContent)
return
}
debugPrint("url", url)
attachmentStorage.store(url: url, extension: "jpeg") { (path, error) in
if let path = path {
do {
let attachment = try UNNotificationAttachment(identifier: "image", url: path, options: nil)
bestAttemptContent.attachments = [attachment]
contentHandler(bestAttemptContent)
return
} catch {
contentHandler(bestAttemptContent)
return
}
}
}
}

if let png = request.content.userInfo["png"] as? String {
guard let url = URL(string: png) else {
contentHandler(bestAttemptContent)
return
}
attachmentStorage.store(url: url, extension: "png") { (path, error) in
if let path = path {
do {
let attachment = try UNNotificationAttachment(identifier: "image", url: path, options: nil)
bestAttemptContent.attachments = [attachment]
contentHandler(bestAttemptContent)
return
} catch {
contentHandler(bestAttemptContent)
return
}
}
}
}

contentHandler(bestAttemptContent)
}
}

override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}

}

class AttachmentStorage {

func store(url: URL, extension: String, completion: ((URL?, Error?) -> ())?) {
// obtain path to temporary file
let filename = ProcessInfo.processInfo.globallyUniqueString

let path = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("\(filename).\(`extension`)")

// fetch attachment
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
let _ = try! data?.write(to: path)
completion?(path, error)
}
task.resume()
}

}

来自云函数的负载

   const payload = {
notification: {
title: 'It’s decision time!',
body: 'text'
sound: 'default',
mutable_content: true
},
data: {
image: "https://example.com/static_logos/320x320.png"
}
};

Push notification from firebase console

更新:我也读过这个issue

最佳答案

我修好了。

我正在发送 mutable_content 作为 true。但奇怪的是,Firebase 工程师期待的是 String"true" 而不是

const payload = {
notification: {
title: 'It’s decision time!',
body: "text"
sound: 'default',
mutable_content: 'true'
},
data: {
image: "example"
}
};

关于ios - UNNotificationServiceExtension 不适用于 Firebase Cloud Functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43996156/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com