我想使用服務中的GamesClient。但是,我發現了一個問題,我無法看到解決方案,因爲花了幾天的時間來玩代碼。注意:我已正確設置了按鍵,並且我可以很好地運行Buttonclicker示例。Google Play Services GamesClient無法自動連接
我下載了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中的錯誤消息是什麼意思:它說我需要「登錄」,但這正是我試圖自動連接到有效的遊戲服務憑據,當然?如果我先使用CLIENT_PLUS登錄,則它仍拒絕爲CLIENT_GAMES連接。
經過多年的閱讀,我的第一個SO問題 - 我有很多想法!
評論刪除 – IanB