2

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

我为什么要它?

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

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

谢谢你的回答。

4

2 回答 2

4

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

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

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

于 2013-08-05T17:45:30.407 回答
0

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

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

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

于 2013-08-04T11:12:46.210 回答