为什么 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应用程序中做一些等效的事情?我能够在客户端应用程序上获取令牌,但我还需要获取一个单一用途代码以传递给我的后端服务器,如上所述。我找不到等效的函数来获取服务器身份验证代码。(使用 com.google.api.client.extensions.java6.auth.oauth2)

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


答案 1

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

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

基本上,从您的应用程序中,您打开系统浏览器(不鼓励嵌入式Web视图)并向端点发出https请求。在请求中,您提供本地重定向URI参数,即 (您应该查询平台以获取相关的环回 IP,并在随机可用端口上启动 HTTP 侦听器)。当用户已同意或出现错误(例如,如果用户拒绝了请求)时,授权代码将发送到本地 HTTP 侦听器。您的应用程序必须侦听此本地 Web 服务器,才能使用授权码检索响应。您还可以选择重定向到您的应用直接声明的服务器 URI,请参阅上面链接上的文档。当你的应用收到授权响应时,为了获得最佳可用性,它应使用 HTML 页面进行响应,指示用户关闭浏览器选项卡并返回到你的应用。此外,如果需要 Games 范围,请确保在请求中使用 as 范围(下面的示例),并带有换行符和空格以提高可读性。https://accounts.google.com/o/oauth2/v2/authhttp://127.0.0.1:9004error=access_deniedhttps://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开发者控制台链接应用中创建并链接类型应用,才能使本地主机重定向正常工作。如果您计划直接重定向到服务器 URI,请使用 type,请将服务器 URI 添加到 API 管理器中部分下的otherWebAuthorized redirect URIsCredentials

浏览器截图:

consent picture


答案 2

这个问题的第1部分终于有了一个正确的答案!在 gms 10.2.0 https://developers.google.com/android/guides/releases#february_2017_-_v102 的发行说明中描述了获取服务器代码的新方法。这里提供了一个如何做到这一点的好例子:https://github.com/playgameservices/clientserverskeleton
我最终更新了Google的baseGameUtils以遵循上面的示例。

仍然不确定问题的第2部分执行此操作的正确方法,目前我正在将令牌发送到服务器,该令牌可以正常工作,但可能不安全。


推荐