android 中内容的 DELTA 更改同步延迟

Delay in syncing the DELTA changes from contentful in android

我是 contentful 的新手,我编写了一个 android 应用程序,它使用内容交付 API 从我的 space.

中获取内容

我已经使用 Vault 和普通 API(没有 vault)来获取内容。

我观察到在获取增量更改(新内容和更新内容)时总是有 3-5 秒的延迟。

我的要求是提供实时数据同步。

这是我的实现问题还是 contentful 的预期行为。

示例代码: 1. 使用保险柜

Vault.with(App.getInstance(), SampleSpace.class).requestSync(
            SyncConfig.builder()
                    .setClient(ClientProvider.get())
                    .setInvalidate(false)
                    .build());
List<SampleTable> appointments = Vault.with(App.getInstance(), SampleSpace.class)
            .fetch(SampleTable.class)
            .where(SampleTable$Fields.DATE+"=?", mDateToCheck)
            .all();
  1. 正常API

    private final CDAClient client =   CDAClient.builder().setToken(CDA_TOKEN).setSpace(SPACE_ID).build();
    
    client.observe(CDAEntry.class).all()
    .observeOn(AndroidSchedulers.mainThread())
    .subscribeOn(Schedulers.io())
    .subscribe(new Action1<CDAArray>() {
    @Override
    public void call(CDAArray entries) {
         //business logic here
      }});
    

感谢您的宝贵时间和帮助!!

我是 Contentful 中 Java 和 Android SDK 的维护者。

速度放缓可能有以下原因:

1) 你是syncing很多数据

这意味着,在 Vault 案例中,必须从 Contentful 中获取大量数据,甚至可能是不同的页面、解析、序列化并放入数据库。

在这种情况下,看看通过 ID 获取条目而不使用同步可能是个好主意。遗憾的是,您会失去 Vault 模型的优点 类,并且需要自己实现从 Contentful 模型到自定义模型的映射。

2) ClassLoader.getResources

在您的代码片段中,您正在为每个同步调用重新创建 CDAClientVault。这在 Android 上有一个 known issue,我们目前正在努力修复它。

目前,在发布更新之前,建议尝试查看在字段中存储 Vault and/or CDAClient 是否对后续调用有帮助。

3) 网速慢

遗憾的是,这意味着我们无能为力......;)

我希望这能给你一些建议,关于解决方案,请随时报告你遇到的任何进展。

我找到的解决此问题的唯一方法是使用 Contentful Preview API。 所以当某个对象为modified/deleted/created时,响应速度将是相同的。也就是说,用户可以在 app/web.

中在一秒或更短时间内获取每个更新

问题是应用程序会显示已发布或未发布的条目(草稿),所以这取决于项目要求。

如果用户需要使用此解决方案,他必须使用 内容预览 API - 访问令牌,它位于 API 的顶部面板中Contentful 中的部分。希望对您有所帮助!