gpt4 book ai didi

ios - 为什么通知服务扩展没有在 iOS 14 上触发?

转载 作者:行者123 更新时间:2023-12-04 12:29:56 25 4
gpt4 key购买 nike

我已集成 UNNotificationServiceExtension这允许我在呈现给用户之前更改推送通知标题。
我已遵循 apple developer documentation 中提到的准则并在 SO 上浏览了相关问题,但似乎没有任何效果。

按照指示,我遵循了这些准则

  • 在您的推送通知负载中包含 "mutable-content": 1
  • 应正确设置扩展的部署目标(应与主应用程序目标匹配)
  • 负载必须包含带有标题、副标题或正文信息的警报字典
  • 推送通知负载中的“aps”字典必须包含一个带有字符串值的键“category”。

  • 问题
    收到推送通知时,有时不会触发我的通知服务扩展,主要是当我删除并安装应用程序的新副本时。在这种情况下也不会触发断点。看起来系统忘记触发服务扩展。我选择了正确的扩展方案,而不是主要的应用程序目标。我的通知标题没有按照我的逻辑更新。
    注:这发生在 iOS 14 上。在 iOS 12 上,它工作正常。这是 iOS 错误 ?
    这已经在这些线程中讨论过。
    https://developer.apple.com/forums/thread/67202
    https://developer.apple.com/forums/thread/125987
    任何帮助将非常感激。
    谢谢
    示例代码
    我做了一个示例项目来演示这个问题。您可以从 Github Repo 下载
    相关 WWDC 视频
    Best Practices and What’s New in User Notifications

    最佳答案

    您必须修改 UNNotificationRequest 内容部分。下面是我用于通知扩展的代码片段。

    import UserNotifications

    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 {
    var urlString:String? = nil
    if let urlImageString = request.content.userInfo["urlImageString"] as? String {
    urlString = urlImageString
    }
    // You can set what ever title you want to set
    bestAttemptContent.title = "Your custom tile goes here"
    if urlString != nil, let fileUrl = URL(string: urlString!) {
    print("fileUrl: \(fileUrl)")

    guard let imageData = NSData(contentsOf: fileUrl) else {
    contentHandler(bestAttemptContent)
    return
    }
    guard let attachment = UNNotificationAttachment.saveImageToDisk(fileIdentifier: "image.jpg", data: imageData, options: nil) else {
    print("error in UNNotificationAttachment.saveImageToDisk()")
    contentHandler(bestAttemptContent)
    return
    }

    bestAttemptContent.attachments = [ attachment ]
    }

    contentHandler(bestAttemptContent)
    }
    }

    override func serviceExtensionTimeWillExpire() {
    if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
    contentHandler(bestAttemptContent)
    }
    }

    }

    @available(iOSApplicationExtension 10.0, *)
    extension UNNotificationAttachment {

    static func saveImageToDisk(fileIdentifier: String, data: NSData, options: [NSObject : AnyObject]?) -> UNNotificationAttachment? {
    let fileManager = FileManager.default
    let folderName = ProcessInfo.processInfo.globallyUniqueString
    let folderURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(folderName, isDirectory: true)

    do {
    try fileManager.createDirectory(at: folderURL!, withIntermediateDirectories: true, attributes: nil)
    let fileURL = folderURL?.appendingPathComponent(fileIdentifier)
    try data.write(to: fileURL!, options: [])
    let attachment = try UNNotificationAttachment(identifier: fileIdentifier, url: fileURL!, options: options)
    return attachment
    } catch let error {
    print("error \(error)")
    }

    return nil
    }
    }
    我使用的 JSON 有效负载
    {
    "aps": {
    "alert": {
    "title": "title",
    "body": "Your message Here"
    },
    "mutable-content": 1
    },
    "urlImageString": "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885__340.jpg"
    }
    使用您的代码仓库,我得到的输出是
    enter image description here
    如果您想调试通知服务扩展,那么您必须从下拉列表中选择通知服务扩展方案,然后您的断点将为您工作

    关于ios - 为什么通知服务扩展没有在 iOS 14 上触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66259849/

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