Realtime-SDK-Flutter
Realtime-SDK-Flutter copied to clipboard
fix?(android): query by user should ignore cache
问题
ref: https://leanticket.cn/tickets/35944
android端发消息,只触发了一次update请求。 ios端发消息,触发了一次get和一次update请求
Android 和 iOS 的行为不一致,推测可能是 Android 的 Query 会先查本地缓存。
建议方案
目前 dart 的接口没有缓存相关的选项,建议 Android 的所有相关查询(用户发起的会话、消息查询)都忽略本地的持久缓存,与 iOS 端保持一致。
@jwfing 有空时看一下。
android 内部对于查询缓存是有失效机制的,这个缓存并不会一直有效。
对于那个工单里的问题,你给的解决方案是让他们通过一个其他接口来减少 find 查询,所以总的方向是 find 查询尽量少才好。 如果 android sdk 改成了每次都增加一次 find 查询,那么用户会质疑调用量太大,我们服务器也会承担一些无必要的查询。
我觉得这个问题统一的方向应该是都尽量用缓存,不要把请求发到云端去才对。
问题
dart 目前没有缓存相关的选项,android 相当于默认总是走缓存了。它带来了以下问题:
- 用户无法主动选择是否要从服务端拉取最新的数据
- android 目前没有实现「可靠的离线通知机制」,缓存的数据可能与服务端数据不一致
- iOS 端目前使用的 Swift SDK 是没有缓存功能的
RTM-no-local-storage模块,所以 iOS 这边要加缓存功能的话,dart 的 bridge 协议估计大概率要做调整,还需要增加一些和缓存有关的接口以及选项
建议的方案
- 下一个 beta 版,Android 先和 iOS 保持一致,所有查询都忽略缓存,保证两个平台的行为的一致性
- Flutter Plugin 的缓存功能列入开发计划
期望
- Flutter Plugin 提供一个坚实并统一的缓存 API
- 用户能便利的使用缓存功能
用户无法主动选择是否要从服务端拉取最新的数据
Conversation.fetchXXX 接口是会强制拉取云端数据的。
用户无法主动选择是否要从服务端拉取最新的数据
Conversation.fetchXXX 接口是会强制拉取云端数据的。
dart 这边目前没有这个接口,当然后续可以把它加上;
关于 Query 的行为,我依然坚持 Query 不应该默认总是走缓存,最佳方式是提供 onlyNetwork、onlyCache 等选项,同时 API 有默认配置。所以如果要增加这些选项,bridge 协议就需要变动,同时 iOS 以及 Android 需要去适配变动后的协议。
@zapcannon87 @jwfing 请问sdk中的缓存功能有计划在近期加上吗?
短期内没有相关计划。