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

时间:2016-10-16 11:22:41

标签: android web-services authorization google-play-services

背景

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

我只想登录一次,我希望通过Games.API登录,因为这给了我很多优势(Google Play游戏排行榜,成就等)。

我已经能够使用GoogleAuthUtil.getToken(...)获取授权令牌,我可以在登录Games.API后执行此操作,这似乎给了我一个令牌。好到目前为止。

Google says this is not safe并说我应该migrate to ID token flow。但是,据我所知,这种方法需要我使用

Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);

这意味着对 Games.API 额外签到。此外,addApi Games.API Auth.GOOGLE_SIGN_IN_API无法GoogleApiClient同一Games.API

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

问题:

我是否应该使用Games.API,如果不是,我的选项是什么,我只想使用Color c; c.B = 0xFF; int b = c.B; // Okay. You have assigned B int r = c.R; // Error CS0170! Use of possibly unassigned field Color cc = c; // Error CS0165! Use of unassigned local variable. The object cannot be used until all of the fields are initialized 登录?

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

注意:

我刚开始时问我this question。目前的问题有望澄清情况。

1 个答案:

答案 0 :(得分: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();

一旦成功,这将最终调用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();

根据2016年的新Play Games Permissions更新,GoogleSignIn每个游戏只出现一次(即使在设备之间!),之后用户不会在屏幕中显示{{{{{ 1}}。唯一的可视登录将是“已保存的游戏”快照选择屏幕。

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