Android 我是否应该使用GoogleAuthUtil.getToken(…)呢?

Android 我是否应该使用GoogleAuthUtil.getToken(…)呢?,android,web-services,authorization,google-play-services,Android,Web Services,Authorization,Google Play Services,背景: 我需要在我的服务器后端进行身份验证,以便我知道客户端是真实的。在我的Android游戏中,我通过GoogleAppClient连接到Games.API 我只想登录一次,我想通过Games.API登录,因为这给了我很多优势(谷歌游戏排行榜、成就等) 我已经能够使用GoogleAuthUtil.getToken(…)获得授权令牌,我可以在登录Games.API后这样做,这似乎给了我一个令牌。到目前为止还不错 但是他说我应该这样做。但是,据我所知,这种方法需要我使用 Intent signIn

背景:

我需要在我的服务器后端进行身份验证,以便我知道客户端是真实的。在我的Android游戏中,我通过
GoogleAppClient
连接到
Games.API

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

我已经能够使用
GoogleAuthUtil.getToken(…)
获得授权令牌,我可以在登录
Games.API
后这样做,这似乎给了我一个令牌。到目前为止还不错

但是他说我应该这样做。但是,据我所知,这种方法需要我使用

Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
这意味着在Games.API上增加一个登录。此外,不可能将
添加API
两个
游戏API
对同一
GoogleAppClient
进行谷歌登录API的身份验证

好的,升级到最新的google play服务(至少r29),使用它我可以使用
Games.API
Games.getGamesServerAuthCode(…)
为我的服务器获取身份验证令牌。但这有两个问题:(1)它需要Android 6.0或更高版本,这将占据80%的市场份额;(2)它已被弃用


问题:

我是否应该使用
GoogleAuthUtil.getToken(…)
,如果不使用,我的选项是什么,因为我只想使用
Games.API
登录

通过登录,我的意思是向用户展示登录视频。我不介意登录到其他东西,只要用户不必与登录交互


注意:


我最初问我是什么时候开始的。当前的问题有望澄清这一情况。

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

为了达到我想要的,我发现以下方法非常有效。。。我不知道这是否是最好的方法

首先,使用
Auth.GOOGLE\u sign\u登录

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();
mGoogleApiClientForGames = new GoogleApiClient.Builder(mActivity, this, this)
    .addApi(Games.API).addScope(Games.SCOPE_GAMES)
    .addApi(Drive.API).addScope(Drive.SCOPE_APPFOLDER)
    .build();

mGoogleApiClientForGames.connect();
成功后,最终将调用
onConnected(…)
,您可以在此处协商第二次登录Games.API。这必须在新的
GoogleAppClient
上单独执行,因为您不能混合使用
Games.API
Auth.GOOGLE\u SIGN\u 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();
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年的最新更新,
GoogleSignIn
仅在每场游戏中出现一次(甚至在设备之间!),之后用户将不会看到
GoogleSignIn
的任何可视登录屏幕。唯一的可视登录将是保存的游戏快照选择屏幕

这适用于Android 2.3(使用google play服务),并且没有弃用警告。胡萨