我已经检查并仔细检查了有关此问题的在线消息来源 - 但我仍无法从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帐户 - 并且它成功了。
然而,由于该应用程序将供公众使用,这仍然无法解决我们的问题(暂时可以将其视为创可贴 - 我还需要进一步调查此问题)。
答案 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调用。