2

我处于需要为两个范围(来自我的 android 应用程序)请求访问令牌的情况,https://www.googleapis.com/auth/userinfo.email并且https://www.googleapis.com/auth/userinfo.userinfo

我想在一次调用时获得这两种权限getAuthToken,但无法确定要传入authTokenType参数的字符串。我尝试了几种合理的组合但没有积极的结果:(

有没有人解决过这个问题?是否可以?

4

2 回答 2

10

我遇到了同样的问题。Shah 几乎是对的,但他的范围字符串是错误的。它应该是

"oauth2:<scope_url> <scope_url>"

不是

"oauth2:<scope_url> oauth2:<scope_url>"
于 2012-09-04T17:22:29.050 回答
6

如果您需要多个 OAuth 2.0 范围,请使用空格分隔的列表

oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.userinfo

您要求提供示例代码,因此请查看Google Docs Upload Sample应用程序,并在此应用程序中查看在此示例 Android 屏幕中完成的身份验证流程(忽略它是关于 Google Docs 的,它仍然首先授权)。您可以获取整个应用程序并在具有 Google API 的模拟器中运行它,或者在您的手机上运行它。授权工作流程从 buttonAuthorize 单击开始,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 机制,而不是打开 Web 浏览器,而是使用您首次激活 Android 手机时提供的身份验证。

另请注意,用户看到的是范围的完整 URL 而不是友好名称,我还没有找到解决此问题的方法,如果您发现如果您能分享答案会很棒。

于 2012-07-14T16:45:49.263 回答