サービスから GamesClient を使用したいと思います。しかし、私は問題を発見し、コードをいじって数日を費やしたが、それを回避するための解決策が見当たらない. 注: キーが正しく設定されており、Buttonclicker の例を問題なく実行できます。
私は ButtonClicker をダウンロードし、やりたいことの基礎としてそれを使用しました。GameHelper をサービスに変換しても問題ありません。UI パーツのみがアクティビティを必要とし、残りはコンテキストのみを必要とします。ポップアップ UI は必要ありません。ログイン資格情報が間違っている場合は、ログインに失敗したいだけです。したがって、「自動ログイン」は問題ないはずです。しかし、すぐに接続を拒否していることに気付きました。
GameHelper のストック標準バージョンでさえ、常に最初の自動ログインに失敗することがわかりました。具体的には、次の connectCurrentClient() で:
ケース CLIENT_GAMES: mGamesClient.connect(); 壊す;
ログインは常に失敗し、失敗リスナー (onConnectionFailed()) を呼び出します。これにより、次のリゾルバーが呼び出されます (758 行目):
mConnectionResult.startResolutionForResult(mActivity, RC_RESOLVE);
「魔法のように」解決します。ユーザーに資格情報を要求するダイアログはポップアップしません (資格情報は既に正しいためです!) が、ある種のダイアログが短時間表示され、すぐに削除されるように見えます。その後、mGamesClient.connect(); で成功します。
startResolutionForResult() が UI のアクティビティを必要とすることを除いて、すべて問題ありません。これはまさに私が望んでいないことです。
自動ログインが機能しないのは奇妙だと思います-常に失敗し、2回目の試行が必要であり、神秘的な startResolutionForResult() が何をしても機能しない場合にのみ機能します。mConnectionResult に示されている理由は、「サインインしている必要がある」ためです。startResolutionForResult() 行を削除して別の接続を試みると、再び失敗し、さらに mGamesClient.connect(); の実行時に接続を閉じていないというエラー メッセージが表示されます。
CLIENT_GAMES の代わりに CLIENT_PLUS を指定して GamesHelper を設定しようとすると、すべて期待どおりに動作します - Google Plus アカウントにログインしていますが、onConnectionFailed() は呼び出されません。
これが Google のコードのバグであるかどうかを尋ね、startResolutionForResult() が接続を機能させるために追加の魔法を実行する場合、connect() を実行する意味は何かを尋ねる以外に、これを回避する方法はありますか? 具体的には、UI が必要ないため、startResolutionForResult() を使用することはできません。コーディングしている状況では、接続とサインインが最初から正しいため、使用する必要はありません。
また、mConnectionResult のエラー メッセージが実際に何を意味するのかもわかりません。「サインイン」する必要があると書かれていますが、有効な資格情報を使用してゲーム サービスに接続することで、まさにそれを自動的に行おうとしています。最初に CLIENT_PLUS を使用してサインインすると、引き続き CLIENT_GAMES への接続が拒否されます。
SO を何年も読んだ後、私の最初の SO の質問です。