2014-11-07 3 views
8

Я использую (небольшое изменение) обходное решение из этого course, чтобы получить userId, который является нулевым, если запрос был отправлен с клиента Android.Локальные точки приложения Google App Engine userId имеют значение null

/** 
* 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 

Это обходное решение уже отлично работает в других проектах, поэтому проблема должна быть в другом месте. Моя конечные точки апи помечаются следующими области, 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_AUDIENCE и Constants.WEB_CLIENT_ID одинаковы. Я не использую веб-клиента, но Google told me, чтобы добавить идентификатор веб-клиента. Должен ли идентификатор этого клиента перенаправлять uris и исходные данные javascript?

В моем клиенте Android я использую следующее, чтобы указать аудиторию.

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

Пожалуйста, помогите мне разобраться в этом.

+0

Конечная точка Google отправляет то, что создано на конечной точке, это означает, что userid не устанавливает конечную точку google на первом месте. –

+0

извините, но я не понимаю. – raptor

ответ

0

Я только понял, почему это обходное решение работает. Мне нужно начать новый сеанс объектизации, чтобы кеш не использовался, и userId может быть заполнен.

Objectify objectify = ofy().factory().begin(); 
AppEngineUser savedUser = objectify.load(); 
Смежные вопросы