2016-08-10 4 views
19

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

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

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

+1

Программа элемент аннотированный @Deprecated это один, что программисты не рекомендуется использовать, как правило, потому что это опасно, или потому, что лучшая альтернатива существует. Компиляторы предупреждают, когда устаревший программный элемент используется или переопределяется в не устаревшем коде. Это не значит, что оно исчезнет, ​​будет удалено или в любом случае удалено, это означает, что есть ЛУЧШИЙ способ сделать это. Не паникуйте, держитесь спокойно и продолжайте, O) –

+0

Я это понимаю. Я ищу «правильный» способ сделать что-то в Android, так как довольно недавно (январь) Google предлагал использовать эту функцию. У меня есть дополнительная проблема сопоставимой функции, не существующей в не-Android-версии Java api. – M1LKYW4Y

+1

@ M1LKYW4Y Вы нашли «правильный» способ сделать то, что хотели (1)? Я нахожусь в той же точке своего развития. Google, похоже, рекомендовал этот подход сравнительно недавно, но этот подход, похоже, уже не рекомендуется! – Antinous

ответ

0

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

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

0

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

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

В основном из приложения вы открываете системный браузер (встроенные webviews обескураживают) и сделать запрос по протоколу 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 Developer Console Linked-приложение, для перенаправления локального хоста на работу. Используйте тип Web, если вы планируете напрямую перенаправлять на URI сервера, добавьте URI сервера в Authorized redirect URIs в диспетчере API в разделе Credentials.

скриншот браузера:

consent picture

+0

Простите мою осторожность, но откуда вы знаете, что код в 1) на самом деле рекомендован google, и неверность неверна? Является ли ваш источник той же статьей, которую я связал наверху? – M1LKYW4Y

+1

Ну, я не уверен, поэтому использование «кажется», но это то, что говорит Клейтон Уилкинсон (разработчик программы разработчиков) в Google: «Лучший способ справиться с этим - это ...» и «это будет быть нормальным API ". И после этого от Google ничего не было объявлено по поводу этой проблемы. Кроме того, в настоящее время это единственный способ получить authcode на Android, я сомневаюсь, что он удалит его в ближайшее время. Это может нарушить множество игр, в зависимости от этой функции входа в систему, использующей собственный серверный сервер. – jbilander