登录成功后没有收到来自 facebook 的电子邮件,它只提供姓名

Not getting email from facebook after logging success, it is giving name only

callbackManager = CallbackManager.Factory.create();  
fbLoginButton.setReadPermissions("email");
        fbLoginButton.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 object, GraphResponse response) {

                            Toast.makeText(getApplicationContext(), "Data" + object.toString(), Toast.LENGTH_LONG).show();

                            etEmail.setText(object.optString("email"));
                            etName.setText(object.optString("name"));


                        }
                    }).executeAsync();

        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException error) {

        }
    });


    buttonFbSignup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            fbLoginButton.performClick();
        }
    });

您设置了 email 权限(希望在登录弹出窗口中被要求提供),但是没有 API 请求电子邮件的电话。确保您知道 "declarative fields" 的含义,这将是获取用户电子邮件的 api 调用:/me?fields=email

在官方文档中有关于如何调用API的示例代码,具体查看fields参数:https://developers.facebook.com/docs/android/graph

例如,这应该return用户的id,姓名和电子邮件-只要在登录过程中获得email权限,并且只要确认电子邮件脸书:

GraphRequest request = GraphRequest.newMeRequest(
        accessToken,
        new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(
                   JSONObject object,
                   GraphResponse response) {
                // Application code
            }
        });
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
request.executeAsync();

您还应该阅读整个页面,它解释了字段参数以及更多内容:https://developers.facebook.com/docs/graph-api/using-graph-api/

错误是我的邮箱没有在 facebook 上注册


如果您真的在登录过程中被要求提供电子邮件权限,但仍然没有电子邮件……请确保您甚至使用电子邮件登录 facebook。它不一定非得在那里,例如,人们也可以使用 phone 号码登录。