我正试图使游戏API工作,参考https://github.com/playgameservices/android-samples/blob/master/BaseGameUtils/src/com/google/example/games/basegameutils/BaseGameActivity.java作为示例代码。
我的情况很相似,基本上我正在尝试连接游戏客户端并收到否定答案。当试图管理它与startResolutionForResult()这是我得到的:
E/Volley(15638): [1492] il.a: Unexpected response code 403 for https://www.googleapis.com/games/v1/players/112370814111712506xxx
E/Volley(15638): [1492] il.a: Unexpected response code 403 for https://www.googleapis.com/games/v1/players/112370814111712506xxx
E/SignInIntentService(15638): Access Not Configured
[...]
E/LoadSelfFragment(15748): Unable to sign in - application does not have a registered client ID
最后一条消息,"应用程序没有注册的客户端ID"让我想到这个问题…但我不认为我的问题与应用程序id/客户端id有关,因为我在另一台机器上使用相同的API密钥。我也很确定SHA1的正确性,它来源于当前机器的debug.keystore。
这个问题似乎与我正在使用的测试地址有关,奇怪的是,我没有收到总是相同的答复:使用相同的键和设置,我有时得到:
E/SignInIntentService(15638): Access Not Configured
甚至:
E/SignInIntentService(15638): Unable to load player
我在OnConnectionFailedListener内使用startResolutionForResult()
,它简短地显示登录屏幕,但随后它因报告的错误而崩溃。
- 另一个奇怪的事情是onActivityResult()被调用,结果代码是10004
我不能理解的最后一件事是为什么,登录失败后,方法onConnectionFailed()被一遍又一遍地调用,循环我的应用程序。相关代码是:
public void initClient() { GamesClient.Builder gcBuilder = new GamesClient.Builder(this, cb, cf); gcBuilder.setGravityForPopups(Gravity.TOP | Gravity.CENTER_HORIZONTAL); //gcBuilder.setScopes(mScopes); mGamelient = gcBuilder.create(); mSchiacciameleView.setGameClient(gcBuilder.create()); } OnConnectionFailedListener cf = new OnConnectionFailedListener() { public void onConnectionFailed(ConnectionResult arg0) { Log.e("Verme", "CONN FAIL:" + arg0.getErrorCode()); if (arg0.hasResolution()){ PendingIntent pendingIntent = arg0.getResolution(); //startResolutionForResult(SchiacciaMeleGame.this, 66); try { arg0.startResolutionForResult(me, ConnectionResult.SIGN_IN_REQUIRED) ; } catch (SendIntentException e) { Log.e("Verme", "Err in resolution", e); } }else{ Log.e("Verme", "NO RESOLUTION"); } }
};
这两天我一直在摆弄这些库。坦率地说,我不喜欢谷歌处理这个问题的方式;文档仍然不完整,运行时行为似乎有点不一致(完全相同的代码在另一台机器上工作,SHA1在两台机器上都是正确的)。也许是我的错?
感谢您的回复
生成一个OAuth 2.0客户端ID,它特别给出如下警告:
警告:不要直接手动打开Google api控制台在该页上添加您的客户端id。这样做可能会导致错误你向游戏服务发送请求。
所以我的经验是你需要严格遵循指南:使用Google Play Developer Console设置Google Play Game Services