让我从Google 团队提供的BaseGameUtils中的 GameHelper 类的相关代码开始:
/**
* 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"
当我的玩家第一次请求多人游戏时,他会看到 google+ 登录按钮,该按钮绘制在 opengl 画布中(一切都是横向的)。一旦他点击它,用户发起的登录流程就开始并执行上述方法。
如果我注释掉中途添加的行,就会发生奇怪的事情。
有时我会看到选择我的一个谷歌帐户的对话,有时意图的结果表明连接失败,我返回我的应用程序。对于这些我可以选择帐户的时间,在我这样做之后:
- 屏幕的方向从横向到纵向来回切换了几次
- 呈现谷歌登录对话的活动在其自身之上多次启动。
- 我必须选择我的 google+ 应用程序共享偏好并在至少 3 次连续相同的对话中至少按 3 次“确定”。有时缺少“公共”按钮(其位置有空格)
- 有时我在上述所有情况发生后成功登录,有时我收到失败消息。当我再次单击登录时,它会自动登录成功,无需任何用户交互。
我试图弄清楚我是否做错了什么,或者这是否是一个已知问题。有没有人能够复制它?(请注意,这只发生在第一次登录时,即如果一个人想尝试复制它,他首先需要:
- 清除应用数据
- 转到 google+ 应用设置,然后断开应用与 google 帐户的连接
我不确定这是否与连接到 GAMES_CLIENT 有关,或者从横向应用程序启动 google+ 登录流程通常是否存在问题。
提前致谢, 尼科斯