【问题标题】:Using isSignedIn in onCreate? [Google Play Service]在 onCreate 中使用 isSignedIn? [谷歌播放服务]
【发布时间】:2013-08-04 10:25:22
【问题描述】:

在我的应用程序中,我想让用户使用他们的 google 帐户登录,所以我使用的是 google play 服务。这行得通 - 他们可以登录和注销。当我从一个活动传递到另一个活动时,我还想知道用户是否在 onCreate 方法中登录。我正在尝试为此使用 Google Play 服务 isSignedIn 函数,但在 onCreate 方法上它总是返回 false(因为 google play 服务在 onStart 上触发)。

我为什么要它?

因为,我有两个登录选项。一个是谷歌帐户,另一个是我自己的登录面板。我想知道用户是否在 onCreate 上使用 google 或我的系统登录。所以我会指导我的流程。

我怎样才能做到这一点,或者您有其他建议吗?

感谢您的回答。

【问题讨论】:

    标签: android google-play-services


    【解决方案1】:

    这是由于 Activity 生命周期造成的。每次 Activity 进入后台时,都会得到onStop。 Play Games API 要求您在发生这种情况时断开连接。当 Activity 回到前台时,它会得到onStart,然后 GameHelper 会尝试重新建立连接。在这种情况发生之前,isSignedIn 将返回 false。当连接恢复时(如果用户已经登录,这应该很快),onSignInSucceeded 回调将被调用,从那时起isSignedIn 将返回true

    onCreate 上无法知道登录是否会成功。相反,您应该等待onSignInSucceededonSignInFailed。保证在 Activity 进入前台后不久将调用这两个回调之一。

    此时,您可以决定要做什么,因为用户是否使用 Google+ 登录将一目了然。

    【讨论】:

      【解决方案2】:

      我不确定您的应用程序是如何工作的,但听起来好像您可能在一项活动结束时调用 GameHelper.onStop,而实际上您希望游戏在另一项活动中继续进行。我认为您不能这样做(请参阅此处接受的答案): Google Play Game Services multiplayer with Activity switching

      我的应用程序被排列成片段,我有一个片段与 GameHelper 交互。因此,一旦我执行了 GameHelper.setup 和 GameHelper.onStart,我就可以从任何片段中的任何方法调用 isSignedIn 并获得正确的响应。

      另一种方法(我过去使用过)是将 isSignedIn 的结果保存在共享首选项中的布尔值中。然后,您可以检查此项以确定用户是否已登录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-18
        • 2014-05-23
        • 1970-01-01
        • 1970-01-01
        • 2015-03-27
        • 2017-06-06
        相关资源
        最近更新 更多