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



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

示例代码为:

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)
})
}
)

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

出现问题时最好查看为重新发送到服务器。 对于脱机案例,可以检查错误返回是否为网络错误,或手动检查网络连接可用性。

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

var resendList : [YourObjectType]
// when failed to send to server
resendList.append(yourFailedObject)

然后,2个解决方案:

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

  2. 跟踪(收听通知(连接更改,使用建议方法 https://stackoverflow.com/a/27310748/4919289 并将其重新上传到服务器

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

我不是iOS开发人员,但我可以共享逻辑流程和一些参考。

当用户点击上传时:检查网络是否可用?

  • 如果是:上传帖子。
  • 如果否:
    • 将帖子保存到应用存储或离线数据库
    • 将广播接收器设置为在设备联机时接收广播。此链接可能会有所帮助。
    • 设备上线时上传帖子。

如果您正在寻找Firebase提供的解决方案,则可以在此处找到更多详细信息。

Firebase在他们的文档中提供了很多方法来做到这一点。 https://firebase.google.com/docs/database/ios/offline-capabilities

上传到 Firebase 服务器时,它会自行排队,并等待再次连接到互联网后再上传。如果发生这种情况超时,或者您想以自己的方式执行此操作,只需尝试在setValueupdateChild函数上使用 completionHandler 上传 - 如果没有成功并且错误消息是由于互联网,请将其添加到手机的本地缓存中,其中包含数据和 Firebase 服务器的路径。

onLoad,再次尝试相同的上传,直到成功,一旦成功 - 清除本地缓存。

相关内容

最新更新