我正在尝试在我的Android应用中使用Google Plus实现“跨设备登录”。
如何实现这一点并没有很好地记录,我在github中找到的最好的文档是this video,and these sample apps。
鉴于sample Android app和what the Google developers say in the video的代码,我了解会发生以下情况:
我在设备A中安装并启动该应用。此设备只有一个Google帐户,该帐户从未登录过该应用。
onCreate()将调用PlusClient#connect()。由于用户从未在另一台设备中登录,我们将获得onConnectionFailed()。
如果用户点击登录按钮,我们将执行mLastConnectionResult.startResolutionForResult(),它将执行要求用户许可的PendingIntent。
现在我们已经授予用户权限,对PlusClient#connect()的新调用将导致onConnected()。
现在,我们在设备B中安装该应用。此设备只有一个Google帐户,与设备B相同。
在onCreate()中,我们将启动PlusClient#connect()
由于同一Google帐户之前在其他设备中授予了相同的权限/范围,因此将调用onConnected()。
在上一个序列中,点7不会发生。立即联系不会永远不会发生。 确实,如果我执行mLastConnectionResult.startResolutionForResult()它将连接而不再询问相同的权限,但是如果刚刚安装了应用程序,则从onCreate触发的连接将导致onConnectionFailed()。
我不确定我是否弄错了它只是不是那样工作(但这是我从视频中理解的),或者它没有按预期工作。
非常感谢任何帮助。
谢谢。
注意: - 该应用程序已在谷歌播放开发者控制台中正确设置 - 我在两个不同的客户端请求完全相同的范围,因为它实际上是相同的应用程序 - 这两款设备只有一个Google帐户。 - 我正在使用github中的示例应用程序运行此实验
答案 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()。如果用户之前已使用该帐户登录,这将使静默登录工作。