BaseGameUtilsにある GameHelper クラスの関連コードから始めましょう。Googleチームが出発点として提供しています。
/**
* Attempts to resolve a connection failure. This will usually involve
* starting a UI flow that lets the user give the appropriate consents
* necessary for sign-in to work.
*/
synchronized void resolveConnectionResult() {
// Try to resolve the problem
if (mConnectionResult.hasResolution()) {
// This problem can be fixed. So let's try to fix it.
try {
// launch appropriate UI flow (which might, for example, be the
// sign-in flow)
mExpectingActivityResult = true;
// >>> **I 'VE ADDED THE FOLLOWING LINE - IT RESOLVES MY ISSUE WITH SOME SIDE EFFECTS which are irrelevant with the problem here (they have to do with my app)** <<<
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
mConnectionResult.startResolutionForResult(mActivity, RC_RESOLVE);
} catch (SendIntentException e) {
...
}
} else {
....
}
}
アプリケーションのマニフェスト ファイルにより、アプリケーションの向きが横向きに強制されます
android:configChanges="orientation"
android:screenOrientation="landscape"
プレーヤーが初めてマルチプレーヤー ゲームを要求すると、opengl キャンバス (すべてが横向き) に描画された google+ サインイン ボタンが表示されます。タップするとすぐに、ユーザーが開始したサインイン フローが開始され、上記のメソッドが実行されます。
途中で追加した行をコメントアウトすると、奇妙なことが起こります。
Google アカウントの 1 つを選択するダイアログが表示されることもあれば、インテントの結果が接続の失敗を示してアプリに戻ることもあります。アカウントを選択できるこれらの時間については、選択した後:
- 画面の向きが横向きから縦向きに数回前後します
- Google のサインイン ダイアログを表示するアクティビティは、それ自体の上に何度も起動されます。
- Google+ アプリの共有設定を選択し、少なくとも 3 回連続して同じダイアログで [OK] を 3 回以上押す必要があります。「公開」ボタンがない場合があります (その位置に空白があります)。
- 上記のすべてが発生した後、サインインに成功することもあれば、失敗メッセージが表示されることもあります。もう一度サインインをクリックすると、ユーザーの操作なしで自動的に正常にサインインします。
何か間違ったことをしているのか、それとも既知の問題なのかを把握しようとしています。誰でも再現できますか?(これは最初のサインインでのみ発生することに注意してください。つまり、試して再現したい場合は、最初に次のことを行う必要があります。
- アプリのデータを消去する
- Google+ アプリの設定に移動し、Google アカウントからアプリを切断します
これが GAMES_CLIENT への接続に関係しているのか、それともランドスケープ アプリからの google+ サインイン フローの起動に一般的に問題があるのかはわかりません。
前もってありがとう、ニコス