facebook sdk 4.x 有问题吗?
Is there something wrong with facebook sdk 4.x?
我试图在两个不同的应用程序中获取用户电子邮件,但总是收到空响应。我的同事有同样的问题,在网上我只能找到旧版本的回复。
据我所知,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"));
}
自 Graph API v2.4 以来,您需要专门添加电子邮件字段,而不是仅使用 /me
您必须添加您想要获取的字段:
/me?fields=name,email
当然这只是基本形式的 API 调用,您可以在文档中阅读,您需要添加 "fields" 参数作为 [=21= 中的参数]: https://developers.facebook.com/docs/reference/android/current/class/GraphRequest/
在更新日志中搜索 "Declarative Fields":https://developers.facebook.com/docs/apps/changelog#v2_4
我试图在两个不同的应用程序中获取用户电子邮件,但总是收到空响应。我的同事有同样的问题,在网上我只能找到旧版本的回复。
据我所知,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"));
}
自 Graph API v2.4 以来,您需要专门添加电子邮件字段,而不是仅使用 /me
您必须添加您想要获取的字段:
/me?fields=name,email
当然这只是基本形式的 API 调用,您可以在文档中阅读,您需要添加 "fields" 参数作为 [=21= 中的参数]: https://developers.facebook.com/docs/reference/android/current/class/GraphRequest/
在更新日志中搜索 "Declarative Fields":https://developers.facebook.com/docs/apps/changelog#v2_4