Firebase离线支持:在用户离线时上传帖子,并在iOS Swift应用中用户上线时同步

Utt*_*dey 5 firebase swift firebase-realtime-database google-cloud-functions firebase-storage

我在iOS-Swift项目中使用firebase,我必须启用离线支持上传帖子,在帖子中有一张图片和标题就像Instagram一样,所以我想要的是当用户离线并且他/她想要上传帖子,他/她的照片保存在缓存中,当用户上线时,照片上传并返回我们可用于保存帖子的下载URL - 详细说明数据库.

示例代码是:

                let photoIDString = UUID().uuidString
                let storageRef = Storage.storage().reference(forURL: "storage ref URL").child("posts").child(photoIDString)

                storageRef.putData(imageData, metadata: nil, completion: { (metadata, error) in

                guard let metadata = metadata else {
                    return
                }
                if error != nil {
                    return
                }
                storageRef.downloadURL(completion: { ( url, error ) in
                    guard let downloadURL = url else {
                        return
                    }
                    let photoUrl = downloadURL.absoluteString
                    self.sendDataToDatabase(photoUrl: photoUrl)
                    })
                }
                )
Run Code Online (Sandbox Code Playgroud)

我想知道我应该在代码中进行哪些更改以提供脱机功能.任何代码段都会有所帮助.

小智 0

问题最好视为出现错误时重新发送到服务器。对于您离线的情况,您可以检查返回的错误是否是网络错误,或者手动检查网络连接可用性。

您可以创建一个重新发送的对象数组,例如

var resendList : [YourObjectType]

// when failed to send to server
resendList.append(yourFailedObject)
Run Code Online (Sandbox Code Playgroud)

然后,2个解决方案:

  1. 手动检查网络连接,并在应用程序在 appDelegate 中激活时重新上传func applicationDidBecomeActive(_ application: UIApplication)。要检查连接性,您可以尝试此处的方法:使用 Swift 检查互联网连接但这有一个问题,用户必须退出应用程序并在网络连接的情况下再次返回

  2. 使用/sf/answers/1911752391/的建议方法跟踪(收听通知)连接更改并将其重新上传到服务器

并循环遍历resendList中的所有对象并再次重新上传。