我应该使用GoogleAuthUtil.getToken(...)吗?

Pix*_*xel 2 android authorization web-services google-play-services

背景:

我需要在我的服务器后端进行身份验证,因此我知道客户端是正版的.在我的Android游戏中,我连接到Games.APIvia GoogleApiClient.

我只想登录一次,这是我想做的Games.API,因为这给了我很多好处(Google Play游戏排行榜,成就等)

我已经能够获得授权令牌GoogleAuthUtil.getToken(...),我可以在登录后使用该令牌Games.API,这似乎给了我一个令牌.目前很好.

Google表示这不安全,并表示我应该转而使用ID令牌流程.但是,据我所知,这种方法需要我使用

Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
Run Code Online (Sandbox Code Playgroud)

这意味着对Games.API进行额外的登录.此外,不可能都相同的!addApiGames.API Auth.GOOGLE_SIGN_IN_APIGoogleApiClient

好的,所以升级到最新的google-play-services(至少是r29),我可以使用Games.APIGames.getGamesServerAuthCode(...)来获取服务器的身份验证令牌.但这有两个问题:(1)它需要Android 6.0或更高版本才能阻挡80%的市场,(2)它已被弃用!


题:

我应该使用GoogleAuthUtil.getToken(...)与否,如果没有,我的选择是什么,我只想使用Games.API

通过登录我的意思是向用户提供登录视觉效果.只要用户不必与登录进行交互,我不介意签署其他内容...


注意:

我刚开始时最初问过这个问题.目前的问题有希望澄清情况.

Pix*_*xel 5

首先,我应该不会使用GoogleAuthUtil.getToken(...).它被弃用了; 结束.

为了实现我想要的东西,我发现以下工作完美无缺......这是否是我不知道的最佳方式.

首先,使用Auth.GOOGLE_SIGN_IN以下方式登录:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(
                                          GoogleSignInOptions.DEFAULT_SIGN_IN)
    .requestEmail()
    .requestIdToken("YOUR-SERVER-CLIENT-ID")
    .build();

mGoogleApiClientForSignIn = new GoogleApiClient.Builder(mActivity, this, this)
    .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
    .build();

mGoogleApiClientForSignIn.connect();
Run Code Online (Sandbox Code Playgroud)

成功之后,这最终会onConnected(...)从您可以协商第二次登录Games.API的地方打电话.这必须在新的上单独执行,GoogleApiClient因为你不能混合Games.APIAuth.GOOGLE_SIGN_IN:

mGoogleApiClientForGames = new GoogleApiClient.Builder(mActivity, this, this)
    .addApi(Games.API).addScope(Games.SCOPE_GAMES)
    .addApi(Drive.API).addScope(Drive.SCOPE_APPFOLDER)
    .build();

mGoogleApiClientForGames.connect();
Run Code Online (Sandbox Code Playgroud)

根据2016年新的Play游戏权限更新,GoogleSignIn每个游戏只出现一次(甚至在设备之间!),之后用户不会在屏幕上显示任何可视对数GoogleSignIn.唯一的可视登录将是"已保存的游戏"快照选择屏幕.

这适用于Android 2.3(使用google-play-services r28)并且没有弃用警告.Huzzah!