Firebase离线,确定项目是否已保存到服务器而不仅仅是本地缓存

时间:2017-02-07 06:49:53

标签: ios swift caching firebase firebase-realtime-database

我有一个消息传递应用程序,我正在使用firebase Offline,当我更新子代值时,它会转到本地缓存然后再转到服务器。但是,当我关闭我的互联网时,它只会进入本地缓存,如果我关闭应用程序,数据就会丢失。

有没有办法确定是否有东西保存到服务器而不是本地缓存?

如果没有,确定某些内容是否已成功发送到服务器的最有效方法是什么。

我尝试了一个观察值,但它也会观察离线更新。

2 个答案:

答案 0 :(得分:2)

只有在将数据写入服务器时才会触发完成侦听器。查看示例:

let message = ["name": "puf", "text": "Hello from iOS"]
ref!.childByAutoId().setValue(message) { (error) in
    print("Error while writing message \(error)")
}

但是如果在写入操作和服务器提交之间重启应用程序,那么该回调就不会被触发。目前没有解决方法。

答案 1 :(得分:1)

我遇到了同样的问题,可以使用云功能解决。基本上,只需创建一个在创建消息时调用的云函数,并将“持久”字段设置为true以显示此消息。它将传播到您的客户端,客户端会将没有“持久”属性的任何消息视为尚未发送的消息。

exports.confirmMessageSave = functions.database
  .ref('/chat/messages/{channelId}/{messageId}')
  .onCreate(function(event) {

    var message = event.data.val();

    var updateFanOut = {};
    updateFanOut['/messages/' + event.params.channelId + '/' + event.params.messageId + '/persisted'] = true;
    return admin.database().ref('/chat').update(updateFanOut);
});