无法通过Facebook登录获取电子邮件,虽然我们获得了accessstoken,id,name但电子邮件为null甚至代码中也提到了电子邮件的许可,我们是否已经从facebook开发者控制台设置了电子邮件权限。 根据{{3}},。
按照设置public class MainActivity extends AppCompatActivity {
CallbackManager callbackManager;
private static final String EMAIL = "email";
String Email = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
callbackManager = CallbackManager.Factory.create();
LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
//loginButton.setReadPermissions(Arrays.asList(EMAIL));
// If you are using in a fragment, call loginButton.setFragment(this);
// Callback registration
LoginManager loginManager = LoginManager.getInstance();
loginManager.logInWithReadPermissions(MainActivity .this, Arrays.asList(EMAIL));
loginManager.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
Log.e("Facebook_loginResult", loginResult.getAccessToken().getToken());
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
try {
Log.e("Login_FB_Response", object.toString());
if (object.has("email")) {
Email = object.getString("email");
}
Log.e("Login_FB_Email", Email);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id, first_name, last_name, email, birthday, gender, location");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
// App code
Log.e("Facebook_Cancel", "onCancel");
}
@Override
public void onError(FacebookException exception) {
// App code
Log.e("Facebook_Exception", exception.getMessage());
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}}