如果我使用游戏,我如何获得服务器的访问令牌?Android中的API



在我的Android游戏中,我使用Google Services获取成就并保存游戏数据。我的Google Api客户端:

mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(StartActivity.this)
                .addOnConnectionFailedListener(StartActivity.this)
                .addApi(Games.API).addScope(Games.SCOPE_GAMES)
                .addApi(Drive.API).addScope(Drive.SCOPE_APPFOLDER)
                .setViewForPopups(findViewById(android.R.id.content))
                .build();

现在我需要使用谷歌授权与我的服务器。我阅读了谷歌文档(https://developers.google.com/identity/sign-in/android/start)并尝试实现这一点。我将.addApi(Auth.GOOGLE_SIGN_IN_API, geo)添加到我的google api客户端。如果我使用这个Api,那么我可以在服务器端获得idToken进行验证。但是我得到一个错误"Auth。GOOGLE_SIGN_IN_API不能与Games.API一起使用"。在互联网上搜索,我发现我应该只使用game . api。我是如何在谷歌开发者博客(http://android-developers.blogspot.ru/2016/01/play-games-permissions-are-changing-in.html)上发现的,这段代码很好:

GetServerAuthCodeResult result = Games.getGamesServerAuthCode(gac, clientId).await();  
if (result.isSuccess()) {  
    String authCode = result.getCode();  
    // Send code to server.  
}

GetServerAuthCodeResultgetGamesServerAuthCode已弃用。result.getCode()总是为我返回null。什么方式是好的获得令牌为服务器端认证,也使用游戏。成就API ?

当玩家在设备上通过身份验证时,我们需要做的是:获取要发送到后端服务器的验证码:

GetServerAuthCodeResult result =
Games.getGamesServerAuthCode(gac, clientId).await();
if (result.isSuccess()) {
    String authCode = result.getCode(); 
        // Send code to server.
}

在服务器上,通过使RPC到https://www.googleapis.com/oauth2/v4/token以交换访问令牌的验证码来交换接收到的验证码。
您必须提供服务器客户机ID、服务器客户机秘密(在创建服务器客户机ID时在Developer Console中列出)和验证码。在这里查看更多细节

一旦你有访问令牌,玩家的ID是检索使用:www.googleapis.com/games/v1/applications//verify/使用访问令牌。在报头中传递验证令牌如下:Authorization: OAuth

响应值将包含用户的播放器ID。这是该用户使用的正确的玩家ID。此访问令牌可用于根据需要进行额外的服务器到服务器调用。

我也有同样的问题,result.getCode()总是为我返回null。原来我忘了在Google Developer Console链接应用下创建和链接Web类型的应用。使用Android类型和Web类型并使用其完整的客户端ID,在调用getGamesServerAuthCode(gac, clientId)时,就完成了这个任务。

最新更新