我遇到的情况是我需要为两个范围(来自我的Android应用程序)请求访问令牌,https://www.googleapis.com/auth/userinfo.email
和https://www.googleapis.com/auth/userinfo.userinfo
我希望在getAuthToken
的单个调用中获得两个权限,但无法找出要传递authTokenType
参数的字符串。我尝试了几种合理的组合,没有积极的结果:(
有没有人解决过这个问题?有可能吗?
答案 0 :(得分:10)
我遇到了同样的问题。 Shah几乎是正确的,但他的范围字符串是错误的。它应该是
"oauth2:<scope_url> <scope_url>"
不
"oauth2:<scope_url> oauth2:<scope_url>"
答案 1 :(得分:6)
如果您需要多个OAuth 2.0范围use a space-separated list。
oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.userinfo
您要求提供示例代码,因此请查看Google Docs Upload Sample应用程序,并在此应用程序中查看this sample Android screen中完成的身份验证流程(忽略它是关于Google Docs的,它仍然授权第一)。您可以获取整个应用程序并在存在Google API的模拟器中运行它,也可以在手机上运行它。授权工作流程从buttonAuthorize click,Authorize()开始,您对此方法特别感兴趣:
private void gotAccount(Account account)
{
Bundle options = new Bundle();
accountManager.getAuthToken(
account, // Account retrieved using getAccountsByType()
"oauth2:https://www.googleapis.com/auth/userinfo.email oauth2:https://www.googleapis.com/auth/userinfo.userinfo", // Auth scope
//"writely", // Auth scope, doesn't work :(
options, // Authenticator-specific options
this, // Your activity
new OnTokenAcquired(), // Callback called when a token is successfully acquired
null); // Callback called if an error occurs
}
用户获取此访问请求屏幕:
请注意,这是使用“本地”OAuth2机制,而不是打开网络浏览器,而是使用首次启动Android手机时提供的身份验证。
另请注意,用户会看到范围的完整网址而不是友好名称,我haven't找到了解决此问题的方法,如果您确实发现它会很好,如果您可以分享答案。