我正在尝试在两个不同的应用中收到用户的电子邮件,但我总是得到空的回复。我的同事有同样的问题和在线我只能找到旧版本的回复。
据我所知,Facebook并不能保证可以随时成功检索到用户的电子邮件,但我在不同的Facebook用户身上进行了测试并获得了相同的回复。
我很感激一点帮助,甚至确认我的代码不正确。
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
new GraphRequest(
AccessToken.getCurrentAccessToken(),
"/me",
null,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
try {
trace("GRAPH RESPONSE" + response.getJSONObject().toString()); // returns {name:{}, id{}}
String token = AccessToken.getCurrentAccessToken().getToken();
String userProfilePicURL = "https://graph.facebook.com/me/picture?type=large&method=GET&access_token=" + token;
String fullName = response.getJSONObject().getString("name");
String email = response.getJSONObject().optString("email");
String[] names = fullName.split(" ");
UserProfile.getInstance().setLoginProfileParams(names[0], names[1], userProfilePicURL, token);
} catch (JSONException e) {
trace("json error " + e);
}
}
}
).executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
});
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
private void facebookLogin() {
LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this,
Arrays.asList("public_profile", "email"));
}
答案 0 :(得分:1)
您需要专门添加自Graph API v2.4以来的电子邮件字段,而不是仅使用/me
您必须添加要获取的字段:
/me?fields=name,email
当然这只是基本形式的API调用,您可以在文档中阅读,需要在“GraphRequest”中添加“fields”参数作为参数:https://developers.facebook.com/docs/reference/android/current/class/GraphRequest/
在更改日志中搜索“声明字段”:https://developers.facebook.com/docs/apps/changelog#v2_4