Android 安卓&x2B;应用引擎:user.getUserID()在端点中为null
我有一个带有GAE服务器的Android应用程序。我尝试按照developers.google.com上的描述对用户进行身份验证,我将用户参数添加到endpoint方法中,等等。我得到一个不为null的用户,但是这个方法getUserId()返回null。这与这个相当古老的问题相似: 但我仍然不知道如何解决这个问题。你如何处理这个错误?你见过它吗 在android客户端中,我做了以下工作(简化): 我还有另一个非常重要的问题:如果getMail()提供了正确的帐户,但getUserId()提供了null,那么该用户是否经过身份验证?我读到,如果用户对象没有经过身份验证,它应该是空的,但我不确定任何更多。。。Android 安卓&x2B;应用引擎:user.getUserID()在端点中为null,android,google-app-engine,authentication,google-cloud-endpoints,Android,Google App Engine,Authentication,Google Cloud Endpoints,我有一个带有GAE服务器的Android应用程序。我尝试按照developers.google.com上的描述对用户进行身份验证,我将用户参数添加到endpoint方法中,等等。我得到一个不为null的用户,但是这个方法getUserId()返回null。这与这个相当古老的问题相似: 但我仍然不知道如何解决这个问题。你如何处理这个错误?你见过它吗 在android客户端中,我做了以下工作(简化): 我还有另一个非常重要的问题:如果getMail()提供了正确的帐户,但getUserId()提供了
我正在使用AppEngineSDK1.8.7。我正在部署到GAE的真实设备和后端上进行测试。我刚才问了同样的问题,并得到了答案。见链接:
原因是appengine上有一个bug。我想现在没有好的解决方案。我将电子邮件存储为普通属性并将其从默认获取组中删除,我将long用作主键(由AppEngine生成),并通过电子邮件属性查询实体。我不喜欢我的解决方案,如果有人能提供的话,我会接受(并实施:))一个更好的解决方案。这是一个已知的问题,已经提交给谷歌,我已经附上了下面的问题链接 有两种解决方法(1)保存用户并从存储中读取,如果它引用的是有效的帐户,则将填充用户id(这很糟糕,因为您为每个经过身份验证的API访问支付了保存/加载/删除成本,即使它很小,而且显然是一些性能成本)和(2)您可以使用google+ID,但这与用户ID不同 这是非常令人沮丧的,目前还没有ETA,因为据我所知,他们正在处理一些关于auth设计的基本问题 请用星号为那个问题投票。你可以在这里找到所有的信息 这是目前正式批准的解决方法[(1)以上],您也可以在上面的链接中找到,但为了方便起见,可以在这里找到:
对于上面提到的解决方法(2),您可以查看第一个链接,然后转到第39页。请给我们看一些真实的代码,好吗?当然可以,但我会在下午4点左右回家时提交我的代码。我想我现在会问我什么时候在工作,也许当我回到家,我会有答案,并能够与我自己的项目进展。。。虽然我相信我遵循了这个:和那个:漂亮的字面意思…用代码更新后。请帮忙。。。我将非常感谢任何帮助。。。
credentials = GoogleAccountCredential.usingAudience(getApplicationContext(), "server:client_id:" + WEB_CLIENT_ID);
credentials.setSelectedAccountName(accountName);
WarriorEntityEndpoint.Builder endpointBuilder = new WarriorEntityEndpoint.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credentials);
warriorEntityEndpoint = endpointBuilder.build();
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
try {
warriorEntityEndpoint.getWarrior().execute();
} catch (Exception e) {
}
return null;
}
}.execute();
@Api(name = "warriorEntityEndpoint", namespace = @ApiNamespace(ownerDomain = "szpyt.com", ownerName = "szpyt.com", packagePath = "mmorpg.monsters"),
version = "version1",
scopes = {"https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/userinfo.profile"},
clientIds = {Constants.ANDROID_CLIENT_ID, Constants.WEB_CLIENT_ID},
audiences = {Constants.ANDROID_AUDIENCE})
public class WarriorEntityEndpoint {
private static final Logger log = Logger.getLogger(WarriorEntityEndpoint.class.getName());
@ApiMethod(name = "getWarrior")
public WarriorEntity getWarrior(User user) throws OAuthRequestException, IOException {
log.log(Level.SEVERE, "this gives correct email: " + user.getEmail());
log.log(Level.SEVERE, "this is null: " + user.getUserId());