【发布时间】:2016-04-18 18:49:01
【问题描述】:
我正在开发一个具有 sqlite 数据库的 Android 应用程序。我想为数据库添加一些云服务和跨同一用户的多个设备的同步。会有登录机制,不同用户的数据会有所不同。同步将仅适用于登录用户。对于其他人,数据将仅驻留在本地。
我发现 firebase 非常有趣,并开始添加它以进行同步。我无法用 firebase 完全替换 sqlite,因为我需要为未登录的用户提供离线体验。
我为同步操作实现了同步适配器。我正在那里进行 sqlitefirebase 双向同步。
我正在使用 firebase 事务来避免来自多个设备的冲突。但我读到 Firebase Android 最初是在离线数据库上写入的,并在以后与服务器同步。这可能会导致事务失败,有时会导致数据不一致。而且我认为事务不会在应用重启时得到维护。
如果有一个选项可以禁用 firebase 的离线功能,并且每个请求都会立即发送到服务器并以成功完成或失败结束,我可能能够在此处正确实现同步。
那么有没有办法强制直接从服务器写入和读取? 有没有更好的方法来确保跨多个设备的良好冲突处理? firebase 不适合这个目的吗?
【问题讨论】:
-
文本太多,代码不够。但是有几件事:“我需要为未登录的用户提供离线体验”。 Firebase 不需要用户登录。如果您担心识别用户,可以使用anonymous authentication。
-
“有没有办法强制直接从服务器写入和读取?”。 Detect if the user is connected to Firebase,然后才写。
-
“如果有一个选项可以禁用 firebase 的离线功能,并且每个请求都会立即发送到服务器并以成功完成或失败完成”听起来您正在寻找 completion listener。
-
嘿 @FrankvanPuffelen 感谢您的 cmets。对不起,很长的文字。我没有添加代码,因为我正在寻求解决我的设计问题。匿名身份验证会离线工作吗?无论用户是否连接到网络,我能否确保匿名用户的所有数据都可以离线使用(就像 sqlite 一样)。我认为可以在 firebase 中离线保存的数据量是有限的。
-
即使我检查连接状态并进行写入,是否保证连接持续到操作完成?基本上我不希望数据离线保存(使用 sqlite + firebase 时)它应该写入服务器或失败并对此进行回调,以便我可以跟踪它。如果在没有 FirebaseError 的情况下调用了一个完整的侦听器,我可以假设到那时数据已写入服务器吗?如果没有连接会失败吗?
标签: android sqlite firebase android-sqlite firebase-realtime-database