Firestore集数据无法在后台运行

问题描述

我需要我的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 (将#修改为@)