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

Почему GetServerAuthCodeResult устарел? Как я могу сделать что-то эквивалентное в установленном приложении?

После этого сообщения: http://android-developers.blogspot.com/2016/01/play-games-permissions-are-changing-in.html Я получил один код авторизации для использования на моем серверном сервере следующим образом:

import com.google.android.gms.games.Games;    
//later
Games.GetServerAuthCodeResult result = Games.getGamesServerAuthCode(gameHelper.getApiClient(), server_client_id).await(); 
if (result.getStatus().isSuccess()) {
    String authCode = result.getCode();
    // Send code to server...

Кажется, что все работает нормально, но возникает вопрос:

1) getGamesServerAuthCode и GetServerAuthCodeResult отмечены как устаревшие. Зачем? Должен ли я использовать что-то другое вместо этого?

2) Как мне сделать что-то эквивалентное в не-Android установленном приложении Java? Я могу получить токен в клиентском приложении, но мне также нужно получить один код использования для перехода на мой серверный сервер, как указано выше. Я не могу найти эквивалентную функцию для получения кода сервера Auth. (используя com.google.api.client.extensions.java6.auth.oauth2)

В основном я стараюсь следовать этому потоку: https://developers.google.com/games/services/web/serverlogin, но в Java, а не в Javascript. Я пытаюсь сделать это в Android-приложении и на рабочем столе Java-приложения.

4b9b3361

Ответ 1

Наконец, есть правильный ответ на часть 1) этого вопроса! В примечаниях к выпуску gms 10.2.0 https://developers.google.com/android/guides/releases#february_2017_-_v102 описан новый способ получения кода сервера. Хороший пример того, как это сделать, приводится здесь: https://github.com/playgameservices/clientserverskeleton
Я закончил обновление Google baseGameUtils, чтобы следовать приведенному выше примеру.

Не уверен, что это правильно для части 2) вопроса, на данный момент я посылаю токен на сервер, который работает, но, вероятно, небезопасен.

Ответ 2

1) Да, в Android используйте GetServerAuthCodeResult, хотя он по-прежнему отмечен как устаревший. Это рекомендуемый путь от Google, и кажется, что они только забыли удалить аннотацию устаревания при выпуске для широкой публики.

2) Для настольных приложений вы можете следовать инструкциям здесь: https://developers.google.com/identity/protocols/OAuth2InstalledApp

В основном из вашего приложения вы открываете системный браузер (встроенные веб-просмотры не поощряются) и делают запрос https конечной точке https://accounts.google.com/o/oauth2/v2/auth. В запросе вы указываете локальный параметр URI перенаправления, т.е. http://127.0.0.1:9004 (вы должны запросить свою платформу для соответствующего IP-адреса loopback и запустить прослушиватель HTTP на случайном доступном порту). Код авторизации будет отправлен на ваш локальный HTTP-прослушиватель, если пользователь дал согласие или ошибку, например error=access_denied, если пользователь отклонил запрос. Ваше приложение должно прослушивать этот локальный веб-сервер для получения ответа с помощью кода authcode. У вас также есть возможность перенаправлять на URI сервера, прямо заявленные вашим приложением, см. Документы по ссылке выше. Когда ваше приложение получает ответ авторизации, для обеспечения наилучшего удобства использования, он должен отвечать HTML-страницей, инструктируя пользователя закрыть вкладку браузера и вернуться в ваше приложение. Кроме того, если вы хотите, чтобы в области "Игры" убедитесь, что вы используете область https://www.googleapis.com/auth/games как в запросе, пример ниже, с разрывами строк и пробелами для удобства чтения.

https://accounts.google.com/o/oauth2/v2/auth?
  scope=https://www.googleapis.com/auth/games&
  redirect_uri=http://127.0.0.1:9004&
  response_type=code&
  client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com

Обратите внимание: я думаю, вам нужно будет создать и связать приложение типа other в подключенном приложении консоли разработчика Google Play, чтобы перенаправление localhost работало. Используйте тип Web, если вы планируете напрямую перенаправить на URI сервера, добавьте URI сервера в Authorized redirect URIs в диспетчере API в разделе Credentials.

Снимок экрана браузера:

изображение согласия