Realtime-SDK-Flutter icon indicating copy to clipboard operation
Realtime-SDK-Flutter copied to clipboard

fix?(android): query by user should ignore cache

Open zapcannon87 opened this issue 5 years ago • 7 comments

问题

ref: https://leanticket.cn/tickets/35944

android端发消息,只触发了一次update请求。 ios端发消息,触发了一次get和一次update请求

Android 和 iOS 的行为不一致,推测可能是 Android 的 Query 会先查本地缓存。

建议方案

目前 dart 的接口没有缓存相关的选项,建议 Android 的所有相关查询(用户发起的会话、消息查询)都忽略本地的持久缓存,与 iOS 端保持一致。

zapcannon87 avatar Jul 17 '20 06:07 zapcannon87

@jwfing 有空时看一下。

zapcannon87 avatar Jul 20 '20 02:07 zapcannon87

android 内部对于查询缓存是有失效机制的,这个缓存并不会一直有效。

对于那个工单里的问题,你给的解决方案是让他们通过一个其他接口来减少 find 查询,所以总的方向是 find 查询尽量少才好。 如果 android sdk 改成了每次都增加一次 find 查询,那么用户会质疑调用量太大,我们服务器也会承担一些无必要的查询。

我觉得这个问题统一的方向应该是都尽量用缓存,不要把请求发到云端去才对。

jwfing avatar Jul 22 '20 06:07 jwfing

问题

dart 目前没有缓存相关的选项,android 相当于默认总是走缓存了。它带来了以下问题:

  • 用户无法主动选择是否要从服务端拉取最新的数据
  • android 目前没有实现「可靠的离线通知机制」,缓存的数据可能与服务端数据不一致
  • iOS 端目前使用的 Swift SDK 是没有缓存功能的 RTM-no-local-storage 模块,所以 iOS 这边要加缓存功能的话,dart 的 bridge 协议估计大概率要做调整,还需要增加一些和缓存有关的接口以及选项

建议的方案

  1. 下一个 beta 版,Android 先和 iOS 保持一致,所有查询都忽略缓存,保证两个平台的行为的一致性
  2. Flutter Plugin 的缓存功能列入开发计划

期望

  • Flutter Plugin 提供一个坚实并统一的缓存 API
  • 用户能便利的使用缓存功能

zapcannon87 avatar Jul 22 '20 07:07 zapcannon87

用户无法主动选择是否要从服务端拉取最新的数据

Conversation.fetchXXX 接口是会强制拉取云端数据的。

jwfing avatar Jul 23 '20 07:07 jwfing

用户无法主动选择是否要从服务端拉取最新的数据

Conversation.fetchXXX 接口是会强制拉取云端数据的。

dart 这边目前没有这个接口,当然后续可以把它加上;

关于 Query 的行为,我依然坚持 Query 不应该默认总是走缓存,最佳方式是提供 onlyNetworkonlyCache 等选项,同时 API 有默认配置。所以如果要增加这些选项,bridge 协议就需要变动,同时 iOS 以及 Android 需要去适配变动后的协议。

zapcannon87 avatar Jul 23 '20 07:07 zapcannon87

@zapcannon87 @jwfing 请问sdk中的缓存功能有计划在近期加上吗?

renntbenrennt avatar Jan 19 '21 09:01 renntbenrennt

短期内没有相关计划。

zapcannon87 avatar Jan 19 '21 10:01 zapcannon87