问题描述
我需要我的iOS应用在后台收到远程通知时将少量数据保存到Firestore。如果在应用程序进入后台大约30分钟之内收到远程通知,它实际上会保存数据。但是,如果在进入后台大约一小时或更长时间后收到远程通知,则不会设置数据。
它收到通知,因为我可以在控制台中看到打印语句:
AppDelegate:
func application(_ application: UIApplication,didReceiveRemoteNotification userInfo: [AnyHashable : Any],fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print("Tada")
if let dataString = userInfo["action"] as? String {
let data = Data(base64Encoded: dataString)
let jsonDecoder = JSONDecoder()
let action = try! jsonDecoder.decode(RemoteInfo.self,from: data!)
remoteDataManager.respondToRemoteAction(remoteData: action)
}
completionHandler(.newData)
}
RemoteDataManager:
func respondToRemoteCommand(remoteData: RemoteInfo) {
// Some action that changes music playback,this always work!
InfoClass.saveCurrentInfo(data: item)
}
它确实触发了此功能,因为它在setData函数之前将语句打印到控制台中。但是,它不会给我“成功保存在线信息”或“正在保存错误...”,也不会保存到Firestore。
InfoClass:
static func saveCurrentInfo(data: Item) {
let db = Firestore.firestore()
let firebaseItem = try! FirebaseEncoder().encode(data)
print("About to save")
db.collection("Username").document("Item").setData([
"Info" : firebaseItem
]) { (error) in
if let e = error {
print("Error saving: \(e)")
} else {
print("Successfully Saved Info Online")
}
}
}
如上面的代码所示,它会在设置数据(更改音乐播放,每次获取远程通知时始终执行)之前执行一个操作,并触发saveCurrentInfo方法,但是会停止setData(每次都会打印“关于保存”。
就像该应用程序只能工作约1-2秒然后放弃,但始终在进入Firebase设置数据功能时一样。我认为该应用程序在收到远程通知后应该会进行大约30秒钟的后台工作,然后再次变为非活动状态。
如何确保应用程序完成设置数据功能?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)