我在获取云端点方法的用户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客户端。
答案 0 :(得分:5)
你是正确的,问题8848是同一个原因。底层问题与语言无关,并影响两个运行时。目前,您不应期望在端点中通过方法参数传入的User
对象中填充用户ID字段。
超级次优的解决方法是将User
对象持久保存到数据存储区并将其读回。重读对象将包含用户ID。
答案 1 :(得分:-1)
我在问题中使用了相同的文档参考,并且遇到了同样的问题。
最后通过执行以下操作使端点使用OAuth2:
我更新了Google Play服务的更新;现在在第15版(Android SDK)。
端点文档已更新,表明您应为应用程序启用Google Plus API,即使您只是为应用引擎端点使用userinfo.email范围也是如此。我是通过云控制台完成的。
此外,最后,有一个新的说明表明OAuth2无法在模拟器中运行。我证实了这一点。即使指向生产应用引擎,我仍然会从Android模拟器中获得null用户错误。所以我仍然只能从真实设备上测试端点。
我能够确认我需要以上三个步骤。