为什么不推荐使用 GetServerAuthCodeResult?我怎样才能在已安装的应用程序中做一些等效的事情?
Why is GetServerAuthCodeResult Deprecated? How can I do something equivalent in an Installed Application?
在此post之后: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 应用程序中执行等效操作?我能够在客户端应用程序上获得令牌,但我还需要获得一次性代码才能像上面那样传递到我的后端服务器。我找不到获取服务器授权码的等效函数。 (使用 com.google.api.client.extensions.java6.auth.oauth2)
我基本上是在尝试遵循以下流程:https://developers.google.com/games/services/web/serverlogin 但在 Java 中,而不是 Java 脚本。我正在尝试在 Android 应用程序和桌面 Java 应用程序中执行此操作。
这个问题的第1)部分终于有了正确答案!
在 gms 10.2.0 的发行说明中
https://developers.google.com/android/guides/releases#february_2017_-_v102
描述了获取服务器代码的新方法。这里提供了一个很好的例子来说明如何做到这一点:
https://github.com/playgameservices/clientserverskeleton
我最终更新了 Google 的 baseGameUtils 以遵循上面的示例。
对于问题的第 2) 部分,我仍然不确定执行此操作的正确方法,目前我正在将令牌发送到可以工作但可能不安全的服务器。
1) 是的,在 Android 中使用 GetServerAuthCodeResult
,尽管它仍被标记为已弃用。这是 Google 推荐的方式,似乎他们只是在向一般 public.
发布时忘记删除弃用注释
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 侦听器)。当用户同意或出现 error=access_denied
等错误(如果用户拒绝请求)时,授权代码将发送到您的本地 HTTP 侦听器。您的应用程序必须在此本地 Web 服务器上侦听以检索带有授权码的响应。您还可以选择重定向到您的应用直接声明的服务器 URI,请参阅上面 link 上的文档。当您的应用程序收到授权响应时,为了获得最佳可用性,它应该使用 HTML 页面进行响应,指示用户关闭浏览器选项卡并 return 到您的应用程序。此外,如果您想要 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 linked-app 中创建 link 类型 other
的应用, 本地主机重定向工作。如果您打算直接重定向到服务器 URI,请使用类型 Web
,将您的服务器 URI 添加到 API 管理器中 Credentials
.
部分下的 Authorized redirect URIs
浏览器截图:
在此post之后: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 应用程序中执行等效操作?我能够在客户端应用程序上获得令牌,但我还需要获得一次性代码才能像上面那样传递到我的后端服务器。我找不到获取服务器授权码的等效函数。 (使用 com.google.api.client.extensions.java6.auth.oauth2)
我基本上是在尝试遵循以下流程:https://developers.google.com/games/services/web/serverlogin 但在 Java 中,而不是 Java 脚本。我正在尝试在 Android 应用程序和桌面 Java 应用程序中执行此操作。
这个问题的第1)部分终于有了正确答案!
在 gms 10.2.0 的发行说明中
https://developers.google.com/android/guides/releases#february_2017_-_v102
描述了获取服务器代码的新方法。这里提供了一个很好的例子来说明如何做到这一点:
https://github.com/playgameservices/clientserverskeleton
我最终更新了 Google 的 baseGameUtils 以遵循上面的示例。
对于问题的第 2) 部分,我仍然不确定执行此操作的正确方法,目前我正在将令牌发送到可以工作但可能不安全的服务器。
1) 是的,在 Android 中使用 GetServerAuthCodeResult
,尽管它仍被标记为已弃用。这是 Google 推荐的方式,似乎他们只是在向一般 public.
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 侦听器)。当用户同意或出现 error=access_denied
等错误(如果用户拒绝请求)时,授权代码将发送到您的本地 HTTP 侦听器。您的应用程序必须在此本地 Web 服务器上侦听以检索带有授权码的响应。您还可以选择重定向到您的应用直接声明的服务器 URI,请参阅上面 link 上的文档。当您的应用程序收到授权响应时,为了获得最佳可用性,它应该使用 HTML 页面进行响应,指示用户关闭浏览器选项卡并 return 到您的应用程序。此外,如果您想要 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 linked-app 中创建 link 类型 other
的应用, 本地主机重定向工作。如果您打算直接重定向到服务器 URI,请使用类型 Web
,将您的服务器 URI 添加到 API 管理器中 Credentials
.
Authorized redirect URIs
浏览器截图: