我有一个消息传递应用程序,我正在使用firebase Offline,当我更新子代值时,它会转到本地缓存然后再转到服务器。但是,当我关闭我的互联网时,它只会进入本地缓存,如果我关闭应用程序,数据就会丢失。
有没有办法确定是否有东西保存到服务器而不是本地缓存?
如果没有,确定某些内容是否已成功发送到服务器的最有效方法是什么。
我尝试了一个观察值,但它也会观察离线更新。
答案 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);
});