背景
我需要在我的服务器后端进行身份验证,因此我知道客户端是正版的。在我的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。目前的问题有望澄清情况。
答案 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.API
和Auth.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)并且没有弃用警告。胡扎!