哪些是正确的Google+范围变量,以获取电子邮件地址和发布?

时间:2014-05-20 17:49:17

标签: google-plus spring-social spring-social-google

我使用spring-social-google(由git repo构建)允许人们登录我的Spring MVC应用程序(我已经有facebook,twitter和linedin工作)。下面的表单允许我进行身份验证,但不会返回电子邮件地址,并且禁止发布到Google+时间轴:

<form action="<c:url value="/register/social/${providerId}" />" method="POST" id ="${providerId}Form" name = "${providerId}Form">
    <button type="submit"><img src="<c:url value='/resources/${providerId}/sign-in-with-${providerId}.png'/>" border="0"/></button>
    <input type="hidden" name="scope" value="https://www.googleapis.com/auth/plus.profile.emails.read" />                   
</form>

我认为问题在于我没有正确的范围变量。我在这里尝试了一些组合https://developers.google.com/+/api/oauth,但我被告知范围变量都是错误的。我需要哪些?

这是我用来获取电子邮件地址的代码:

public final class LoginConnectionSignUp implements ConnectionSignUp 
{   
    public String execute(Connection<?> connection) 
    {
        final UserProfile up = connection.fetchUserProfile();
        final String email = up.getEmail();
        // ...
    }

}

1 个答案:

答案 0 :(得分:2)

这里有几个问题:

Google的API目前不支持发布到Google+信息流。该软件包似乎可以让您创建“app活动时刻”,这些时刻存储在用户的个人资料中......但这些不是发布到该流的帖子。要生成应用活动,您需要包含https://www.googleapis.com/auth/plus.login范围。

此外,您可以包含email范围或https://www.googleapis.com/auth/plus.profile.emails.read范围。使用这些范围,您应该能够将电子邮件地址作为调用

的一部分
Person person = google.plusOperations().getPerson("me");

所以你的输入标签应该看起来像

<input type="hidden" name="scope" value="https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/plus.profile.emails.read" />                   

(注意要使用的两个范围之间的空格)。

重要提示:该文档介绍了如何通过

等电话获取电子邮件
GoogleUserInfo userInfo = google.userOperations().getUserInfo();

虽然现在可以使用,但它已被弃用并计划在9月删除。 userinfo范围也设置为此时被删除。 不要使用此方法或这些范围。(并联系作者告诉他们弃用它。)