Android - Facebook GraphUser没有电子邮件属性

时间:2014-02-17 09:03:52

标签: android facebook email

我已经检查并仔细检查了有关此问题的在线消息来源 - 但我仍无法从Facebook响应中获取电子邮件属性。

如“入门指南”所示,我在LoginButton上实现了读取权限(“basic_auth”,“email”,“user_birthday”)。在创建会话时也设置相同的权限(Session.createFromExistingAccessToken)。但是,在回调函数上,当记录GraphUser和Response对象时,我仍然无法检索用户的电子邮件。

错误仍然存​​在的可能原因是什么?我错过了一些步骤吗?

**onCreate()**

    ((LoginButton) findViewById(R.id.dialog_generic_footer_button_fblogin))
                .setPublishPermissions(FBSessionV2.getPermissions());

Facebook会话类

...
    public static ArrayList<String> getPermissions(){
       if (PERMISSIONS.isEmpty()){
        PERMISSIONS.add("basic_info");
        PERMISSIONS.add("email");
        PERMISSIONS.add("publish_actions");
        PERMISSIONS.add("user_birthday");
       }
       return PERMISSIONS;
    }
...

WebDialog.onCompleteListener

session = Session.getActiveSession();

if (!session.isOpened() && !session.isClosed()){
    Logger.log(Thread.currentThread().getStackTrace(), "calling accesstoken" + values, Log.DEBUG);
    AccessToken at = AccessToken.createFromExistingAccessToken(values.getString("access_token"), null, null, AccessTokenSource.WEB_VIEW, FBSessionV2.getPermissions());
    session = Session.openActiveSessionWithAccessToken(ControllerBase.getInstance().getActivity(), at, cb);
} else {
    Logger.log(Thread.currentThread().getStackTrace(), "calling openactivesession", Log.DEBUG);
    Session.openActiveSession(ControllerBase.getInstance().getActivity(), true, cb);
}

GraphUserCallback()

...
    userProfile.put("facebookId", user.getId());
    userProfile.put("email", user.getProperty("email"));
    userProfile.put("first_name", user.getFirstName());
    userProfile.put("last_name", user.getLastName());
    userProfile.put("name", user.getName());
    userProfile.put("gender", user.getProperty("gender"));
    userProfile.put("birthday", user.getBirthday());
    if (user.getProperty("email") != null){
        userProfile.put("email", (String) user.getProperty("email"));
    }
...

更新

当我们尝试登录不是Facebook应用程序的开发人员(也可能是管理员)的Facebook帐户时,我们似乎遇到了麻烦。我们只是尝试登录我们的一个具有开发者角色的FB帐户 - 并且它成功了。

然而,由于该应用程序将供公众使用,这仍然无法解决我们的问题(暂时可以将其视为创可贴 - 我还需要进一步调查此问题)。

2 个答案:

答案 0 :(得分:2)

尝试使用这种方式,

String email = user.asMap().get("email").toString();

然后你可以传递这个字符串参数来打印像

这样的电子邮件
TextView mEmail = (TextView) findViewById(R.id.email);
mEmail.setText(email);

通过这种方式,我成功地获得了电子邮件ID。

答案 1 :(得分:2)

您的应用可能处于沙盒模式。请看这里:

https://developers.facebook.com/docs/ApplicationSecurity/#sandbox

这是说

  

请注意,当您的应用处于沙盒模式时,您无法拨打任何电话   代表无法看到您应用的用户的API调用。