Google App Engine云terminal用户标识为空

我正在使用一个从这门课程 (稍作修改)的解决方法来获取userId,如果请求是从Android客户端发送的,则为空。

/** * This is an ugly workaround for null userId for Android clients. * * @param user A User object injected by the cloud endpoints. * @return the App Engine userId for the user. */ private static String getUserId(User user) { String userId = user.getUserId(); if (userId == null) { LOG.info("userId is null, so trying to obtain it from the datastore."); AppEngineUser appEngineUser = new AppEngineUser(user); ofy().save().entity(appEngineUser).now(); AppEngineUser savedUser = ofy().load().key(appEngineUser.getKey()).now(); userId = savedUser.getUser().getUserId(); LOG.info("Obtained the userId: " + userId); } return userId; } 

虽然我无法获得userId。

 INFO: Obtained the userId: null 

这个解决方法已经在其他项目中完美的工作,所以问题必须在其他地方。 我的端点API用以下范围,clientIds和受众注释:

 scopes = { Constants.EMAIL_SCOPE }, clientIds = { Constants.API_EXPLORER_CLIENT_ID, Constants.WEB_CLIENT_ID, Constants.ANDROID_CLIENT_ID }, audiences = { Constants.ANDROID_AUDIENCE } 

Constants.ANDROID_AUDIENCEConstants.WEB_CLIENT_ID是相同的。 我不使用networking客户端,但Google告诉我添加一个networking客户端ID。 这个客户端ID是否需要redirecturis和javascript源指定?

在我的Android客户端中,我使用以下来指定受众。

 mCredential = GoogleAccountCredential.usingAudience( EndpointService.this, "server:client_id:IDIDIDID.apps.googleusercontent.com" ); 

请帮我把这个弄清楚。

Solutions Collecting From Web of "Google App Engine云terminal用户标识为空"