使用谷歌+登录时,我需要添加什么范围才能获取用户电子邮件?

时间:2014-08-21 11:44:55

标签: android google-plus google-login

我正在尝试从google plus api获取访问令牌。

我运行以下代码:

private class RetrieveTokenTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {
        String accountName = params[0];
        Log.e("accountName", accountName);
        String scopes = "oauth2:" + Scopes.PLUS_ME; //

        String token = null;
        try {
            token = GoogleAuthUtil.getToken(getApplicationContext(), accountName, scopes);
        } catch (IOException e) {
            Log.e("GOOGLE+", e.getMessage());
        } catch (UserRecoverableAuthException e) {
            startActivityForResult(e.getIntent(), RC_SIGN_IN);
        } catch (GoogleAuthException e) {
            Log.e("GOOGLE+", e.getMessage());
        }
        return token;
    }

    @Override
    protected void onPostExecute(String s) {
        Log.d("TOKEN", "token: " + s);
    }
}

我使用HTTP GET检查postman中的访问令牌 https://www.googleapis.com/oauth2/v1/userinfo 标题授权承载

结果:

{
id: "111111111111"
name: "my name"
given_name: "my"
family_name: "name"
link: https://plus.google.com/123456789
picture: https:....jpg
gender: "male"
}

如何获取用户的电子邮件?我需要使用什么范围?

2 个答案:

答案 0 :(得分:3)

电子邮件的范围是

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

哪个也需要com.google.android.gms.common.Scopes.PLUS_LOGIN


因此您可以将范围替换为

private static final String SCOPE = "oauth2:"
        + TextUtils.join(" ", new String[] { Scopes.PLUS_LOGIN,
                "https://www.googleapis.com/auth/userinfo.email",
                Scopes.PLUS_ME });

你可以使用

https://www.googleapis.com/auth/userinfo.profile

用于读取用户信息的范围(即姓名,名字/姓氏,个人资料图片,性别等)

答案 1 :(得分:3)

来自https://developers.google.com/+/api/oauth

  

不建议将https://www.googleapis.com/auth/plus.me范围用作登录范围,因为对于尚未升级到Google+的用户,它不会返回用户的姓名或电子邮件地址。

相反,建议您使用profile范围或https://www.googleapis.com/auth/plus.login范围(可用作Scopes.PLUS_LOGIN)。

另外您需要email范围(这是范围的全名,不是网址格式),因此电子邮件地址将作为通话的一部分返回

您的范围定义可能类似于:

String scopes = "oauth2:email " + Scopes.PLUS_LOGIN;

String scopes = "oauth2:profile email"; 

https://www.googleapis.com/oauth2/v1/userinfo端点已被弃用,零星工作,并计划在9月删除。

相反,您应该使用https://www.googleapis.com/plus/v1/people/me(“我”代表经过身份验证的用户的用户ID),并为Authorization标头提供您之前使用的相同承载令牌。

有关弃用和迁移的详细信息,请参阅https://developers.google.com/+/api/auth-migration