facebook sdk 4.x 有问题吗?

Is there something wrong with facebook sdk 4.x?

我试图在两个不同的应用程序中获取用户电子邮件,但总是收到空响应。我的同事有同样的问题,在网上我只能找到旧版本的回复。

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

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

/me?fields=name,email

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

在更新日志中搜索 "Declarative Fields":https://developers.facebook.com/docs/apps/changelog#v2_4