facebook sdk 4.x有什么问题吗?

时间:2015-08-12 09:32:11

标签: android facebook facebook-graph-api facebook-login

我正在尝试在两个不同的应用中收到用户的电子邮件,但我总是得到空的回复。我的同事有同样的问题和在线我只能找到旧版本的回复。

据我所知,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"));
    }

1 个答案:

答案 0 :(得分:1)

您需要专门添加自Graph API v2.4以来的电子邮件字段,而不是仅使用/me您必须添加要获取的字段:

/me?fields=name,email

当然这只是基本形式的API调用,您可以在文档中阅读,需要在“GraphRequest”中添加“fields”参数作为参数:https://developers.facebook.com/docs/reference/android/current/class/GraphRequest/

在更改日志中搜索“声明字段”:https://developers.facebook.com/docs/apps/changelog#v2_4