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.API它Games.getGamesServerAuthCode(...)来获取服务器的身份验证令牌.但这有两个问题:(1)它需要Android 6.0或更高版本才能阻挡80%的市场,(2)它已被弃用!
题:
我应该使用GoogleAuthUtil.getToken(...)与否,如果没有,我的选择是什么,我只想使用Games.API?
通过登录我的意思是向用户提供登录视觉效果.只要用户不必与登录进行交互,我不介意签署其他内容...
注意:
我刚开始时最初问过这个问题.目前的问题有希望澄清情况.
首先,我应该不会使用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.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();
Run Code Online (Sandbox Code Playgroud)
根据2016年新的Play游戏权限更新,GoogleSignIn每个游戏只出现一次(甚至在设备之间!),之后用户不会在屏幕上显示任何可视对数GoogleSignIn.唯一的可视登录将是"已保存的游戏"快照选择屏幕.
这适用于Android 2.3(使用google-play-services r28)并且没有弃用警告.Huzzah!
| 归档时间: |
|
| 查看次数: |
3362 次 |
| 最近记录: |