在我的应用程序中,我们有一个功能可以将从推送通知接收到的内容存储到本地核心数据,并且在后台状态下面临数据丢失问题,
我们遵循的步骤:
1 - 在 didReceiveRemoteNotification 方法中收到推送。
2 - 从核心数据中插入新数据(所有核心数据进程仅在单个类和单个上下文中处理)
self.getManagedContext().perform {
do {
if self.getManagedContext().hasChanges {
print("Core Data class: saveChanges.....")
try self.getManagedContext().save()
}
} catch {
let saveError = error as NSError
print("Core Data class: saveChanges)
print("\(saveError), \(saveError.localizedDescription)")
}
}
3 - 在屏幕上,从核心数据中读取所有保存的列表并显示。
案例:
1 - 前景:它工作正常 - 数据存储并且可以读取所有数据。
2 - 关闭状态(退出):用户强制关闭应用程序,我们从 Web API 读取数据以获取基于上次时间戳的所有列表。
3 - 背景:
-> On App run from Xcode - Debug:
We received push notification and can read push data, store in DB. But failed sometimes, we can get stored data on display (some times we can't read all data only even when app is running in XCode).
-> Open Installed Application(not run from Xcode) -> App failed to list all stored data (its obviously not stored, can't get single data for push received while background mode ).
这里有两种情况,我们确定content_available
在 xcode 中添加和启用了“后台模式”。请检查
AnyHashable("aps"): {
alert = {
body = "Hello and 6";
title = "iPhone 6s ";
};
badge = 2;
"content-available" = 1;}
1 - 应用程序未在后台运行,但我们使用content_available
FCM 推送通知中添加的 100% 确定密钥,因此应用程序应带后台模式silent push notification -> if app is suspended then the system wakes up or launches your app and puts it into the background running state
2 - 应用程序处于挂起状态 - 如何知道应用程序进入挂起状态或本地数据库未能将数据存储到主上下文。
我们在进行中调用 saveContextapplicationDidEnterBackground
并收到每个推送(插入成功时)。
请分享是否有任何解决方案/任何其他可能性来处理本地存储的推送内容,如后台获取(但我们的应用程序需要在收到推送时定期更新,与实时聊天相同)
如果需要更多信息,请告诉我。
谢谢!
注意:斯威夫特 3.3
更新
在 iOS 11 中,不会在后台调用 Push 委托方法,这是导致上述问题的原因。
iOS 10 -> 工作正常
不适用于 iOS 11,但我们可以在调试模式下接收委托方法的推送。
任何想法?
[AnyHashable("gcm.notification.type"): 0, AnyHashable("gcm.notification.msg"): {"extraType":"Text","content":"测试声音"}, AnyHashable("gcm.message_id "): 0:1531860472186830%c52fb209c52fb209, AnyHashable("google.cae"): 1, AnyHashable("aps"): { alert = { body = "text body"; 标题 = "Gopi k"; }; 徽章 = 2; “内容可用”= 1;声音=默认;}]
任何想法,为什么没有调用代表,因为我们已经添加 "content-available" = 1
了推送消息。
谢谢!