Cloud端点api中的函数User.getUserId()为非空的用户对象返回null

时间:2013-04-23 13:55:28

标签: java android google-cloud-endpoints

我在获取云端点方法的用户ID时遇到问题。我在我的Android客户端中使用了oauth2身份验证,并将凭据传递给了我的服务。下面的内容类似于我的方法(简化以使其更清晰)。

我注意到python的issue 8848似乎与此问题非常相似。

同样的问题也是java api中的一个问题吗?方法

public SuccessCode doSomething(WireFormat wire, User user){
    log.info("User id: "+user.getUserId());
    log.info("Federated identity: "+user.getFederatedIdentity());
    log.info("Email address: "+user.getEmail());
}
即使android客户端中的凭据已执行oauth2身份验证,

也会显示联合身份和userId的null。电子邮件地址在日志中正确显示。这完全是在已部署的应用程序上。

有人对于出了什么问题有任何其他建议吗?这个问题有任何已知的解决方法吗?我已按照https://developers.google.com/appengine/docs/java/endpoints/consume_android#making-authenticated-calls中建议的方法设置我的Android客户端。

2 个答案:

答案 0 :(得分:5)

你是正确的,问题8848是同一个原因。底层问题与语言无关,并影响两个运行时。目前,您不应期望在端点中通过方法参数传入的User对象中填充用户ID字段。

超级次优的解决方法是将User对象持久保存到数据存储区并将其读回。重读对象将包含用户ID。

答案 1 :(得分:-1)

我在问题中使用了相同的文档参考,并且遇到了同样的问题。

最后通过执行以下操作使端点使用OAuth2:

我更新了Google Play服务的更新;现在在第15版(Android SDK)。

端点文档已更新,表明您应为应用程序启用Google Plus API,即使您只是为应用引擎端点使用userinfo.email范围也是如此。我是通过云控制台完成的。

此外,最后,有一个新的说明表明OAuth2无法在模拟器中运行。我证实了这一点。即使指向生产应用引擎,我仍然会从Android模拟器中获得null用户错误。所以我仍然只能从真实设备上测试端点。

我能够确认我需要以上三个步骤。