Подтвердить что ты не робот

Функция User.getUserId() в конечной точке Cloud api возвращает null для объекта пользователя, который не является нулевым

У меня проблема с получением идентификатора пользователя для метода конечной точки для облаков. Я использовал аутентификацию oauth2 в своем клиенте android и передал учетные данные моей службе. Ниже приведено то, как выглядит мой метод (упрощается, чтобы сделать его более понятным).

Я отмечаю, что issue 8848 для python, похоже, очень похож на эту проблему.

Проблема такая же в 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());
}

будет показывать значение null для федеративного идентификатора и пользователя, даже если учетные данные в клиенте android выполнялись при аутентификации oauth2. В журнале отображается правильный адрес электронной почты. Это все в развернутом приложении btw.

У кого-нибудь есть другие предложения относительно того, что не так? Какие-либо известные способы обхода проблемы? Я выполнил метод, предложенный в https://developers.google.com/appengine/docs/java/endpoints/consume_android#making-authenticated-calls, чтобы настроить моего клиента android.

4b9b3361

Ответ 1

Вы правы, что проблема 8848 является той же причиной. Основная проблема является языковой агностикой и влияет на обе время работы. На данный момент вам не следует ожидать, что поле идентификатора пользователя, заполненное объектом User, переданным через аргумент метода в Endpoints.

Супер субоптимальное обходное решение состоит в том, чтобы сохранить объект User в хранилище данных и прочитать его обратно. Объект перечитания будет содержать идентификатор пользователя.

Ответ 2

Я следил за той же ссылкой на документ в вопросе и имел ту же самую точную проблему.

Наконец, конечные точки, работающие с OAuth2, выполнили следующее:

Появилось обновление для сервисов Google Play, обновление которого я обновил; теперь на версии 15 (Android SDK).

Документация конечной точки была обновлена, чтобы указать, что вы должны включить API Google Plus для своего приложения, даже если вы просто используете область userinfo.email для своих конечных точек движка приложения. Я сделал это через Cloud Console.

Кроме того, наконец, появилась новая заметка о том, что OAuth2 не работает с эмулятором. Я подтвердил это. Я до сих пор получаю нулевую ошибку пользователя от эмулятора Android, даже если указывать на процессор производственного приложения. Поэтому я все еще могу тестировать конечные точки с реального устройства.

Я смог подтвердить, что мне нужны все три вышеуказанных шага.