当应用程序终止或终止时,我正试图将推送通知(FCM(存储在coredata中。它不起作用。但当应用程序处于后台时,它的存储状态是完美的。当我点击通知时,它也被完美地存储了。但我不能存储在coredata被杀状态。
我正在使用FCM通知
- 当应用程序处于终止状态时,是否可能在iOS中存储coredata通知
- 应用程序被终止时存储核心数据的任何解决方案
您可以使用UNNotificationServiceExtension
。这是用来作为一个拦截器,在呈现给用户之前修改传入通知的内容。但是,您可以使用此拦截器将通知保存到CoreData。请确保在通知数据负载上将mutable-content
设置为1
。只有这些才会被拦截。
FCM支持这个mutable-content
,我在我的一个项目中做了一些非常类似的事情,以确认我的后端用户收到了通知,它工作得很完美。
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()
// TODO
// Save the notification to core data
contentHandler(request.content)
}
override func serviceExtensionTimeWillExpire() {
if let contentHandler = contentHandler,
let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}
您可以更改有效负载的工作状态。在我这边,我已经改变了有效载荷,工作得很好。
背景模式。检查您的背景模式。
更改有效载荷:
{
"to": "Device GCM Id",
"content_available": true,
"mutable_content": true,
"notification":
{
"body":"Your Notification message",
"sound": "default",
"title":"Your App tittle"
}
}
Appdelegate:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
{
// Save pushnotification data to core data
}
当你的应用程序被杀时,这个方法应该保存在核心数据中。我这边100%工作。