java - 为什么不推荐使用 GetServerAuthCodeResult?如何在已安装的应用程序中执行等效操作?

标签 java android oauth oauth-2.0 google-play-games

关注这篇文章: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 应用程序中执行等效操作?我能够在客户端应用程序上获得一个 token ,但我还需要像上面一样获得一个单一使用代码以传递给我的后端服务器。我找不到获取服务器验证码的等效函数。 (使用 com.google.api.client.extensions.java6.auth.oauth2)

我基本上是在尝试遵循这个流程:https://developers.google.com/games/services/web/serverlogin但在 Java 中,不是 Javascript。我正在尝试在 Android 应用和桌面 Java 应用中执行此操作。

最佳答案

1) 是的,在 Android 中使用 GetServerAuthCodeResult 尽管它仍被标记为已弃用。这是 Google 推荐的方式,似乎他们只是在向公众发布时忘记删除弃用注释。

2) 对于桌面应用程序,您可以按照此处的说明进行操作:https://developers.google.com/identity/protocols/OAuth2InstalledApp

基本上从您的应用程序中打开系统浏览器(不鼓励使用嵌入式 WebView )并向 https://accounts.google.com/o/oauth2/v2/auth 端点发出 https 请求.在请求中,您提供一个本地重定向 URI 参数,即 http://127.0.0.1:9004(您应该向您的平台查询相关的环回 IP,并在随机可用端口上启动一个 HTTP 监听器) .当用户同意时,授权代码将发送到您的本地 HTTP 监听器,如果用户拒绝请求,则会发送 error=access_denied 等错误。您的应用程序必须在此本地 Web 服务器上监听才能使用 authcode 检索响应。您还可以选择重定向到您的应用直接声明的服务器 URI,请参阅上面链接上的文档。当您的应用收到授权响应时,为了获得最佳可用性,它应该使用 HTML 页面进行响应,指示用户关闭浏览器选项卡并返回您的应用。此外,如果您想要 Games-scope,请确保您在请求中使用 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

请注意,我认为您必须在 Google Play Developer Console 链接应用程序中创建并链接类型为 other 的应用程序,才能使 localhost 重定向起作用。如果您计划直接重定向到服务器 URI,请使用类型 Web,将您的服务器 URI 添加到 API 管理器中 Credentials 部分下的 Authorized redirect URIs

浏览器截图:

consent picture

关于java - 为什么不推荐使用 GetServerAuthCodeResult?如何在已安装的应用程序中执行等效操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38862555/

相关文章:

java - 从缓存反序列化数据时出现 ClassNotFoundException

java - 尝试让 java 套接字程序工作,但得到 "java.net.BindException: Address already in use 6666 "

java - 在同一项目中使用两个版本的谷歌云资源管理 Java API

android - 如何在 Android 上使用联系人应用程序?

oauth - 如何在 WebAPI 中使用 Google Analytics oAuth?

java - 如何使用 Java 从文本框 Webdriver 获取类值

Android 全形按钮

android - 如何在 Exoplayer 2 中播放 .ts

php - 用户注册后 Laravel 5.4 Passport 重定向

facebook - 应用程序 URL 与重定向 URL