Android谷歌+登录重复显示已注册用户的权限屏幕

时间:2013-12-15 12:59:47

标签: android google-plus

我已使用GoogleAuthUtil类使用“跨客户端身份”方法实施了Google +登录here。我的应用使用以下范围:

http://picasaweb.google.com/data/
http://gdata.youtube.com
https://www.googleapis.com/auth/plus.login
https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile

用户首次登录所有范围时,会在单个屏幕中向用户显示,并且单击登录可以正常工作。一旦用户第一次登录,问题就开始了;任何后续登录(退出应用程序并尝试重新登录)都会引导用户进入以下情形:

  • 再次向用户显示Google权限屏幕(尽管已经授予此帐户此应用程序的权限)
  • 这次(不是第一次登录)权限屏幕被拆分为两个,第一个只显示youtube范围:

    first scope screenshot

  • 第二个显示其余的范围(包括youtube):

    second scopes screenshot

如果用户已经接受了此帐户的这些范围,是否有人知道为什么会再次显示权限屏幕?
更多的是为什么范围第二次分成两个不同的屏幕?

1 个答案:

答案 0 :(得分:2)

实施该流程时需要小心以避免此问题。重要的是要知道对代码的请求(例如oauth2:server:client_id:CLIENTID:api_scope:SCOPES)总是需要显示同意对话框。你应该使用适当的流程:

  1. 为用户检索ID令牌(这不需要同意)
  2. 将此发送到服务器以确定是否需要为此用户提供新的(刷新)令牌。
  3. 如果服务器有一个,它应该从刷新令牌生成访问令牌
  4. 如果没有,客户端应检索一个,这将要求用户同意。
  5. 关于双重同意屏幕 - 可能需要查看您的代码才能回答这个问题。一个常见的原因是使用GoogleAuthUtil检索访问令牌,然后检索代码(已经看到的访问令牌的同意对话框不计算代码检索,因此它会导致另一个)。它可能围绕youtube范围存在问题,但最有可能检索多个令牌。