如何获取登录用户';Facebook Android sdk 4.0中带有图形请求的s电子邮件地址

如何获取登录用户';Facebook Android sdk 4.0中带有图形请求的s电子邮件地址,android,facebook,facebook-graph-api,facebook-sdk-4.0,Android,Facebook,Facebook Graph Api,Facebook Sdk 4.0,我试图在用户使用Facebook(sdk 4.0)登录到我的Android应用程序后获取他的电子邮件地址。我读过很多帖子问同样的问题,但我还是没能做到。我只是用代码让用户登录 LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends", "email")); 然后,我使用 LoginManager.getInstance().registerCa

我试图在用户使用Facebook(sdk 4.0)登录到我的Android应用程序后获取他的电子邮件地址。我读过很多帖子问同样的问题,但我还是没能做到。我只是用代码让用户登录

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends", "email"));
然后,我使用

LoginManager.getInstance().registerCallback(fbCallbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    System.out.println(loginResult.getAccessToken().toString());

                    GraphRequest request = GraphRequest.newMeRequest(
                            loginResult.getAccessToken(),
                            new GraphRequest.GraphJSONObjectCallback() {
                                @Override
                                public void onCompleted(
                                        JSONObject object,
                                        GraphResponse response) {
                                    System.out.println(object.toString());

                                }
                            });
                    Bundle parameters = new Bundle();
                    parameters.putString("fields", "email");
                    request.setParameters(parameters);
                    request.executeAsync();
                }

                @Override
                public void onCancel() {
                    // App code
                }

                @Override
                public void onError(FacebookException exception) {
                    // App code
                }
            });

即使我删除了“字段”部分,我也会得到一个JSON,其中包含一堆用户的公共信息,但从来没有包含电子邮件字段。我正在我自己的Facebook帐户上测试这一点,我确实有一个相关的电子邮件地址。

您可以按如下方式获得登录的用户电子邮件,但请注意

  • 他们不保证你会得到一个电子邮件地址

  • 在某些情况下,虽然用户提供了电子邮件,但如果电子邮件无效,它将不会通过请求发送

    @Override
    public void onSuccess(LoginResult loginResult) {
    
    
    GraphRequest request = GraphRequest.newMeRequest( AccessToken.getCurrentAccessToken(),
            new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object,GraphResponse response) {
                try {
                    String  email=object.getString("email");
                    Log.d(TAG + "user email ", email);
                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
    
                }
    
                });
    
                request.executeAsync();                        
     }
    

  • 下面是完整的代码,通过它我可以从facebook获得我们需要的所有数据

     login_facebook_button = (LoginButton) findViewById(R.id.login_facebook_button);
        login_facebook_button.setReadPermissions(Arrays.asList("public_profile", "user_friends", "email", "user_birthday"));
        //LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
        // Callback registration
        login_facebook_button.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                // App code
                Log.e("onSuccess", "--------" + loginResult.getAccessToken());
                Log.e("Token", "--------" + loginResult.getAccessToken().getToken());
                Log.e("Permision", "--------" + loginResult.getRecentlyGrantedPermissions());
                Profile profile = Profile.getCurrentProfile();
                Log.e("ProfileDataNameF", "--" + profile.getFirstName());
                Log.e("ProfileDataNameL", "--" + profile.getLastName());
    
                Log.e("Image URI", "--" + profile.getLinkUri());
    
                Log.e("OnGraph", "------------------------");
                GraphRequest request = GraphRequest.newMeRequest(
                        loginResult.getAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(
                                    JSONObject object,
                                    GraphResponse response) {
                                // Application code
                                Log.e("GraphResponse", "-------------" + response.toString());
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,link,gender,birthday,email");
                request.setParameters(parameters);
                request.executeAsync();
    
            }
    
            @Override
            public void onCancel() {
                // App code
            }
    
            @Override
            public void onError(FacebookException exception) {
                // App code
            }
        });
    
    希望这对你有帮助


    “contact_email”是电子邮件权限,当我将它添加到我的邮件中时,我缺少了它

    你找到问题的答案了吗?如果是的话,请把它作为一个答案贴在这里。事实上,你问题中的代码对我来说比下面的所有答案都有效,谢谢manThanks,这是对我来说唯一有效的解决方案。谢谢你,伙计。。它也帮助了我:)在这里查看所有参数
     login_facebook_button = (LoginButton) findViewById(R.id.login_facebook_button);
        login_facebook_button.setReadPermissions(Arrays.asList("public_profile", "user_friends", "email", "user_birthday"));
        //LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
        // Callback registration
        login_facebook_button.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                // App code
                Log.e("onSuccess", "--------" + loginResult.getAccessToken());
                Log.e("Token", "--------" + loginResult.getAccessToken().getToken());
                Log.e("Permision", "--------" + loginResult.getRecentlyGrantedPermissions());
                Profile profile = Profile.getCurrentProfile();
                Log.e("ProfileDataNameF", "--" + profile.getFirstName());
                Log.e("ProfileDataNameL", "--" + profile.getLastName());
    
                Log.e("Image URI", "--" + profile.getLinkUri());
    
                Log.e("OnGraph", "------------------------");
                GraphRequest request = GraphRequest.newMeRequest(
                        loginResult.getAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(
                                    JSONObject object,
                                    GraphResponse response) {
                                // Application code
                                Log.e("GraphResponse", "-------------" + response.toString());
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,link,gender,birthday,email");
                request.setParameters(parameters);
                request.executeAsync();
    
            }
    
            @Override
            public void onCancel() {
                // App code
            }
    
            @Override
            public void onError(FacebookException exception) {
                // App code
            }
        });
    
    {Response:  responseCode: 200, graphObject: {"id":"896337040431723","name":"Aneh Thakur","link":"https:\/\/www.facebook.com\/app_scoped_user_id\/896337040431723\/","gender":"male","birthday":"08\/05\/1992","email":"anehkumar@gmail.com"}, error: null}
    
    fbLoginButton.setReadPermissions("public_profile", "user_friends", "user_photos", "email", "user_birthday", "public_profile", "contact_email");