2

让我从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+ 登录流程通常是否存在问题。

提前致谢, 尼科斯

4

1 回答 1

1

我无法重现该问题。当我完全按照您的描述设置我的测试应用程序并将我的手机横向放置时,没有任何问题发生。当我以纵向握住手机时,我可以看到随着登录对话框的出现方向发生变化,然后当应用程序重新获得焦点时它又变回横向,但一切似乎都在工作。身份验证和同意对话框只出现一次,一切似乎都运行良好。

也就是说,我的示例没有使用 OpenGL 画布——也许这就是问题所在。画布和登录流程之间可能存在一些奇怪的交互。我建议在您完成登录流程时隐藏 OpenGL 表面(并将其替换为显示“正在登录...”的静态视图),以确保这一点。

于 2013-06-14T20:34:14.377 回答