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

3

背景:

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

我只想要一次登录,我想通过Games.API来实现这一点,因为这给了我很多优势(Google Play Games排行榜、成就等)

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

谷歌说这不安全,并建议我改用ID令牌流程。但是,据我所知,这种方法需要我使用

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

这意味着需要在Games.API的基础上再进行一次登录。此外,不可能将Games.APIAuth.GOOGLE_SIGN_IN_API同时添加到同一个GoogleApiClient中!

好的,那么升级至最新的google-play-services(至少r29),使用Games.getGamesServerAuthCode(...)可以使用Games.API来获取服务器的授权令牌。但是这有两个问题:(1)需要Android 6.0或以上版本,从而排除了80%的市场;(2)已经被弃用!


问题:

我应该使用GoogleAuthUtil.getToken(...)吗?如果不是,那么在我只想使用Games.API登录时,我的选项是什么?

通过登录,我的意思是向用户呈现登录界面。我不介意登录其他东西,只要用户不必与登录交互即可...


注意:

我最初提出了这个问题,当时我刚开始学习。当前的问题希望能澄清情况。

1个回答

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每个游戏只会出现一次(即使在不同设备之间!)之后用户将不再看到任何GoogleSignIn的视觉登录屏幕。唯一的视觉登录屏幕将是已保存的游戏快照选择屏幕。这适用于Android 2.3(使用google-play-services r28),且没有弃用警告。万岁!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接