【发布时间】:2014-06-07 13:09:48
【问题描述】:
使用 Mobile Backend Starter (MBS) Android 类(在 Google Dev Console 中创建新项目并在 Google I/O 2013 上演示时作为示例项目分发的那些)我能够将新实体插入云数据存储通过调用 CloudBackendMessaging.insertAll 或 .updateAll。如果不存在实体,后者将创建实体,因此在功能上似乎与插入新记录相同。
插入/创建工作正常。但是,当我尝试更新数据存储中的现有条目时,我收到了权限错误,例如(来自后端日志)
方法:mobilebackend.endpointV1.updateAll
错误代码:401
原因:必填
消息:更新 CloudEntity:XXXXXX 的权限不足:用户:YYYYYY
这会导致 logcat 客户端出现匹配的访问错误。
在所有情况下,我都使用有效的 Google 帐户(我自己的)进行安全访问身份验证。
因此,插入的实体显示为我的用户 ID“拥有”,“更新者”和“创建者”显示我的 Google 帐户的电子邮件地址。
但是,当更新现有记录时,使用完全相同的 CloudBackendMessenger 对象,因此使用相同的凭据等。后端告诉我由于权限问题我无法更新。但如果我只是用相同的凭据创建实体,这肯定不正确吗?查看文档,似乎我应该能够在所有情况下编辑由同一用户 ID 拥有的实体(无论 KindName 以及它是否预先添加 [public]、[private] 或什么都没有)。
任何通过 Mobile Backend Starter for Datascore 收到关于 UPDATES 权限错误的人都可以解释一下吗?今天大部分时间我都在为此苦苦思索。
【问题讨论】:
-
似乎解决方法是查询,即获取您要更新的 CloudEntity,例如通过 list() 调用,然后通过 update() 调用对其进行更新。但是,如果您可以直接在实体上执行更新(通过它的 UID 即 setId() 指定)而不必先获取它,那将会更好/更有效。
-
您是否也尝试过使用“事务”来更新单个实体?developers.google.com/appengine/docs/java/datastore/…
-
@Franz Noel。这很有趣 - 您能否详细说明如何通过 CloudEntity 在移动/客户端上将事务与 MBS 一起使用,或者使用代码 sn-p?
标签: android google-app-engine google-cloud-datastore