通知服务扩展不工作

Notification Service Extension Not working

当我使用推送负载发送 mutable-content:1 时,没有显示通知,它也没有在通知服务扩展中命中断点,尽管没有显示可变内容推送,通知内容扩展也工作正常。我没有修改 Notification 服务扩展里面的代码,它是由 Xcode 默认生成的。我在创建通知服务扩展时是否遗漏了什么,或者可能是设备设置的问题? 我几天前在同一台设备上测试过,通知服务扩展工作正常。

下面是我的服务扩展代码

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 {
            // Modify the notification content here...
            bestAttemptContent.title = "\(bestAttemptContent.title) [modified]"
    
           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)
        }
    }
}

编辑 1:下面是我的推送负载

{  
   "aps":{  
      "sound":"default",
      "mutable-content": 1,
      "category": "myCategory",
      "alert":{  
         "body":"this is a custom push",
         "subtitle":"subtitle of the push",
         "title":"Push Test"
      }
      
   }
}

edit1:问题似乎出现在 10.2.1 的特定设备 运行 上,我在 10.2 上检查了其他设备 运行,它触发了通知服务扩展。

我终于解决了这个问题。我不确定是什么导致了这个问题,但经过一些实验后,我意识到不仅我的服务扩展而且所有其他已安装的应用程序的服务扩展都无法正常工作,并且在发送带有“可变内容:1,通知未显示。重新启动设备后,它开始正常工作。我使用 iPhone 6s。

您的 NotificationServiceExtension 的部署目标也可能是一个原因。

就我而言,我在 iOS 12.4 上的设备 运行 上进行测试,同时目标 我的 NotificationServiceExtension 版本是 14.1。我刚刚改变了我的 NotificationServiceExtension 目标版本为 12.4 它工作。

在我的例子中,它最终是我的扩展使用了太多内存。 Console.app 仅显示 Springboard 正在终止应用程序并出现如下错误:

CMSessionMgr- CMSessionMgrHandleApplicationStateChange: CMSession: Sending stop command to _ with pid '_' because client is not allowed to play in the background AND does not continue AirPlaying video when device locks

我以为权利有问题或类似的问题,但一旦我调试它,我发现它是 iOS 杀死占用太多内存的进程。一旦我修复了那个错误,扩展就会一直保持活动状态,直到我调用回调。

就我而言,我删除了扩展名并重新添加。然后重启设备..