我想从服务中使用 GamesClient。但是,我发现了一个问题,并且我花了几天时间研究代码,但看不到解决它的方法。注意:我已经正确设置了按键,并且能够很好地运行 Buttonclicker 示例。
我下载了 ButtonClicker 并将其用作我想做的事情的基础。将 GameHelper 转换为服务没有问题。只有 UI 部分需要一个 Activity,其余的只需要一个 Context。我不需要弹出式 UI;如果登录凭据错误,那么我只想登录失败。所以“自动登录”应该没问题。但是,我很快发现它拒绝连接。
我发现即使是标准版本的 GameHelper 也总是无法通过初始自动登录。特别是在 connectCurrentClient() 中:
case CLIENT_GAMES: mGamesClient.connect(); 休息;
登录总是失败并调用失败监听器(onConnectionFailed())。这反过来又调用了解析器(第 758 行):
mConnectionResult.startResolutionForResult(mActivity, RC_RESOLVE);
“神奇地”解决了它。它不会弹出一个对话框来询问用户的凭据(因为它们已经是正确的!)尽管它似乎确实短暂地闪现了某种对话框并立即将其删除。然后它将成功为 mGamesClient.connect();
一切都很好,除了 startResolutionForResult() 需要 UI 的 Activity - 这正是我不想要的。
我觉得奇怪的是自动登录不起作用 - 它总是失败并且需要第二次尝试,并且只有在神秘的 startResolutionForResult() 完成它所做的任何事情之后才会起作用。mConnectionResult 中给出的原因是它“必须登录”。如果我删除 startResolutionForResult() 行并尝试另一个连接,它会再次失败,此外,在执行 mGamesClient.connect(); 时还有一条关于没有关闭连接的错误消息;
如果我尝试通过指定 CLIENT_PLUS 而不是 CLIENT_GAMES 来设置 GamesHelper,那么一切都会按预期工作 - 我登录到 Google Plus 帐户并且永远不会调用 onConnectionFailed()。
除了询问这是否是 Google 代码中的错误,并询问如果 startResolutionForResult() 执行了一些额外的魔法来使连接正常工作,那么运行 connect() 的意义何在,有什么办法可以解决这个问题吗?具体来说,我不想要 UI,所以我永远不能使用 startResolutionForResult() - 我不应该这样做,因为在我编码的情况下,连接和登录首先是正确的。
我也不确定 mConnectionResult 中的错误消息的真正含义:它说我需要“登录”,但这正是我试图通过使用有效凭据连接到 Games 服务来自动执行的操作,对吗?如果我先使用 CLIENT_PLUS 登录,它仍然拒绝连接 CLIENT_GAMES。
经过多年阅读 SO,我的第一个 SO 问题 - 我完全没有想法!