使用Google Cloud/Android Mobile Backend Starter上的Kind Name访问范围

jco*_*sse 5 google-app-engine android google-cloud-datastore

Google Cloud MBS的文档声明可以通过在字符串"[public]"或"[private]"(或无)之前为该实体的KindName添加前缀来控制对存储实体的访问.

https://cloud.google.com/developers/articles/mobile-backend-starter-api-reference#acfce

但是,尝试使用以[public]或[private]开头的KindNames将CloudEntities插入数据存储区会导致异常/错误,特别是KindName无效.

这是在开放和安全模式下运行的后端(使用Google登录凭据派生_owner字段)的情况

例如,我使用KindName"[public] TestDB"失败,而"TestDB"不会抛出任何异常.

04-22 19:57:54.132:E/AndroidRuntime(4690):进程:com.example.package,PID:4690

04-22 19:57:54.132:E/AndroidRuntime(4690):java.lang.IllegalArgumentException:非法的类名:[public] TestDB

04-22 19:57:54.132:E/AndroidRuntime(4690):在com.google.cloud.backend.core.CloudEntity.(CloudEntity.java:86)

04-22 19:57:54.132:E/AndroidRuntime(4690):at com.example.package.CloudUtil.convertUpdatesToCEList(CloudUtil.java:252)

04-22 19:57:54.132:E/AndroidRuntime(4690):at com.example.package.CloudUtil.checkSync(CloudUtil.java:199)

为简洁起见,编辑/压缩的相关代码部分是:

    CloudBackendMessaging cbm=_cloudfrag.getCloudBackend();

    List<CloudEntity> entries=new ArrayList<CloudEntity>();

    while (...) {
      CloudEntity ce=new CloudEntity(_CLOUD_DB_KIND);
      ce.put("fieldname", devID);
      entries.add(ce);
    }


             _countActivity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                      cbm.updateAll(entries, handler);
                }
            });
Run Code Online (Sandbox Code Playgroud)

其中handler是回调,而_cloudfrag是示例代码中的CloudBackendFragment.

对于单个或多个ie实体列表,我同时使用插入和更新获得相同的效果.

我只能认为我误解了文档 - 但似乎相当明确的KindNames可以从[公共] [私人]等开始?

jco*_*sse 1

从遇到同样问题的其他人在 github 上的错误报告来看,这是 Google 的 MBS 库中的错误。

不幸的是,对此的回应已经沉默了几个月,直到今晚,开发人员发布了一个更新自述文件的提交,以表明该库不再受支持并且不是谷歌的官方产品(尽管它被作为每个云项目的入门套件推送)从控制台开始!)。

https://github.com/GoogleCloudPlatform/solutions-mobile-backend-starter-android-client/pull/16

查看源代码,我认为此访问修饰符功能从未实际实现,尽管文档相反。