无法从 Facebook Android SDK 4.x 获取电子邮件,即使用户已授予权限

Unable to get email from Facebook Android SDK 4.x even if the user has granted the permission

我想从 Facebook 获取用户的电子邮件 Android SDK 4.3.0

有很多关于它的问题,但标记的答案表明有时用户可能不授予权限。

我正在使用我的 Facebook acc 进行测试并且我已授予权限。还是看不懂。

代码:

public static final List<String> FACEBOOK_PERMISSIONS = Arrays.asList("public_profile", "email", "user_birthday");

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState);
    callbackManager = CallbackManager.Factory.create();
    buttonLogin = (LoginButton) view.findViewById(R.id.button_fb_login);
    buttonLogin.setReadPermissions(AppConstants.FACEBOOK_PERMISSIONS);
    buttonLogin.setFragment(this);

    buttonLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
        GraphRequestAsyncTask request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(JSONObject user, GraphResponse response) {
                if (user != null) {
                    Log.d("FacebookSDK", user.optString("email"));
                }
            }
        }).executeAsync();
    }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException error) {

        }
    });
}

我对 Graph API 版本的 4.3.0 SDK 表示怀疑,但您的建议可能会让我受益匪浅。

一如既往,我解决了自己的问题。

我应该明确地把我想要的参数放在下面:

GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
    @Override
    public void onCompleted(JSONObject user, GraphResponse response) {
        if (user != null) {
            Log.d("FacebookSDK", user.optString("email"));
        }
    }
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAsync();