在我的应用程序中,我想让用户使用他们的谷歌帐户登录,以便我使用谷歌播放服务。这有效 - 他们可以登录和注销。我还想知道当我从一个活动传递到另一个活动时,用户是否已使用 onCreate 方法登录。我正在尝试使用Google Play服务isSignedIn功能但是在 onCreate 方法上它始终返回false(因为 onStart 上的google play服务触发器)。
我为什么要这样做?
因为,我有两个登录选项。一个是谷歌帐户另一个是我自己的登录面板。我想知道用户是否使用google或我的系统登录 onCreate 。所以我会指导我的流程。
我如何实现这一点,或者您是否有其他建议?
感谢您的回答。
答案 0 :(得分:4)
这是由于Activity生命周期。每次活动进入后台时,都会获得onStop
。 Play Games API要求您在发生这种情况时断开连接。当Activity返回到前台时,它将获得onStart
,然后GameHelper将尝试重新建立连接。在此之前,isSignedIn
将返回false
。恢复连接后(如果用户已经登录,则应该非常快),将调用onSignInSucceeded
回调,并且isSignedIn
上的该回调将返回true
。
在onCreate
上,无法知道登录是否会成功。相反,您应该等待onSignInSucceeded
或onSignInFailed
。保证在Activity进入前台后不久将调用这两个回调中的一个。
此时,您可以决定该怎么做,因为很清楚用户是否使用Google +登录。
答案 1 :(得分:0)
我不确定您的应用程序是如何工作的但听起来好像您可能在一个活动结束时调用GameHelper.onStop,而实际上您希望游戏继续进行另一个活动。我认为你不能这样做(见这里接受的答案): Google Play Game Services multiplayer with Activity switching
我的应用程序被安排成片段,我有一个与GameHelper交互的片段。因此,一旦我执行了GameHelper.setup和GameHelper.onStart,我就可以从任何片段中的任何方法调用isSignedIn并获得正确的响应。
另一种方法(我过去使用过)是将isSignedIn的结果保存在共享首选项的布尔值中。然后,您可以检查此项以确定用户是否已登录。