Google Plus跨平台单点登录:onConnected从未在全新安装中调用过

时间:2014-04-02 17:27:50

标签: android google-plus google-play-services

我正在尝试在我的Android应用中使用Google Plus实现“跨设备登录”。

如何实现这一点并没有很好地记录,我在github中找到的最好的文档是this videoand these sample apps

鉴于sample Android appwhat the Google developers say in the video的代码,我了解会发生以下情况:

  1. 我在设备A中安装并启动该应用。此设备只有一个Google帐户,该帐户从未登录过该应用。

  2. onCreate()将调用PlusClient#connect()。由于用户从未在另一台设备中登录,我们将获得onConnectionFailed()。

  3. 如果用户点击登录按钮,我们将执行mLastConnectionResult.startResolutionForResult(),它将执行要求用户许可的PendingIntent。

  4. 现在我们已经授予用户权限,对PlusClient#connect()的新调用将导致onConnected()。

  5. 现在,我们在设备B中安装该应用。此设备只有一个Google帐户,与设备B相同。

  6. 在onCreate()中,我们将启动PlusClient#connect()

  7. 由于同一Google帐户之前在其他设备中授予了相同的权限/范围,因此将调用onConnected()。

  8. 在上一个序列中,点7不会发生。立即联系不会永远不会发生。 确实,如果我执行mLastConnectionResult.startResolutionForResult()它将连接而不再询问相同的权限,但是如果刚刚安装了应用程序,则从onCreate触发的连接将导致onConnectionFailed()。

    我不确定我是否弄错了它只是不是那样工作(但这是我从视频中理解的),或者它没有按预期工作。

    非常感谢任何帮助。

    谢谢。

    注意: - 该应用程序已在谷歌播放开发者控制台中正确设置 - 我在两个不同的客户端请求完全相同的范围,因为它实际上是相同的应用程序 - 这两款设备只有一个Google帐户。 - 我正在使用github中的示例应用程序运行此实验

3 个答案:

答案 0 :(得分:4)

我也一直在努力解决这个问题,结果证明只有在您的应用首次打开时才会检查跨平台SSO(首次安装后运行)。清除Google Play服务的缓存和数据对我有用。

答案 1 :(得分:0)

我不确定这里发生了什么。如果您点按登录按钮,系统会提示您重新同意,还是自动登录? (出于诊断目的;您不应该这样做。)

跨设备SSO应该可以在Android到Web上运行,反之亦然,以及从Android到Android。如果设备上有多个帐户,则您无法避开帐户选择器,但此处似乎并非如此。

我刚刚使用https://github.com/googleplus/gplus-quickstart-android的示例应用程序对此进行了测试,似乎工作正常。在尝试其他任何事情之前,我还要确保所有内容都适用于https://www.googleapis.com/auth/plus.login范围。

答案 2 :(得分:0)

为了进一步澄清,以下是我从谷歌那里得到的答复:

  

跨设备单点登录(CDSSO)每个应用每个运行一次   设备,如你所说。这是一项昂贵的操作(迭代   设备上的所有帐户),它通常不会产生任何新的结果   在第一次运行之后。

     

您可以通过几种方式为用户提供无缝登录   卸载/重新安装后的体验:

     
      
  • 使用Smartlock for Passwords,这是为这类事情而构建的。您可以将用户的标识符存储在Smartlock中,然后即使用户获得全新设备也可以获得无触摸登录体验。
  •   
  • 将用户的Google帐户存储在某处,然后在GoogleSignInOptions上调用setAccount()。如果用户之前已使用该帐户登录,这将使静默登录工作。
  •