Facebook Android SDK 4.14.0 获取生日

Facebook Android SDK 4.14.0 get birthday

我目前正在创建一个测试应用程序来测试使用最新的 facebook SDK 更新我们现有的应用程序问题是我需要获取用户生日。我对此感到困惑,因为 SDK3 及更高版本提供的信息比更新的 SDK4 多,而且我不知道如何获得生日,因为到目前为止我看到的所有答案都没有提供我的生日。到目前为止,这是我的代码:

登录按钮回调:

 fbLogin = (LoginButton) findViewById(R.id.login_button);
    fbLogin.setReadPermissions(Arrays.asList("email", "user_birthday"));

    fbLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code

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


                    try {

                        if (object.has("id"))
                            id = object.getString("id");
                        if (object.has("name"))
                            userName = object.getString("name");
                        if (object.has("email"))
                            userEmail = object.getString("email");
                        if (object.has("gender"))
                            gender = object.getString("gender");
                        if (object.has("birthday"))
                            birthday = object.getString("birthday");

                        String profile_URL = "https://graph.facebook.com/" + id+ "/picture?type=large";


                        LogCat.show(id + "\n" + userName + "\n" + userEmail + "\n" + birthday + "\n" + profile_URL + "\n" + gender);


                    } catch (Exception e) {
                        e.printStackTrace();

                        LogCat.show("Error:" + e.getMessage());
                    }

                }
            });


            Bundle parameters = new Bundle();
            parameters.putString("fields", "id, name, email,gender, birthday");

            request.setParameters(parameters);
            request.executeAsync();
        }

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

            Toast.makeText(SplashLogin.this, "CANCEL", Toast.LENGTH_SHORT).show();

        }

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

            Toast.makeText(SplashLogin.this, "" + exception.toString(), Toast.LENGTH_SHORT).show();

        }
    });

JSON 回复 returns 只有我帐户的 ID 和姓名、电子邮件和性别,但不包括生日。我错过了什么吗?

根据facebook最新的sdk,获取生日需要先提交申请审核。在测试应用程序中,您可以获得 public 配置文件,其中包括以下内容

  • id
  • 封面
  • 姓名
  • first_name
  • last_name
  • age_range
  • link
  • 性别
  • 语言环境
  • 图片
  • 时区
  • updated_time
  • 已验证

有关详细信息,您可以阅读此 link

中的以下文档

If your app requests this permission Facebook will have to review how your app uses it. link

Facebook 不给用户生日 default.You 必须使用扩展权限。

我通过 Facebook 开发者控制台在我的应用程序中启用生日权限解决了这个问题。

 fbSignUp.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(final LoginResult loginResult) {
            // App code

            GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {


                    try {
                        Data.fbAccessToken = loginResult.getAccessToken().getToken();

                        LogCat.show(loginResult.getAccessToken().getToken());

                        if (object.has("id")) {
                            id = object.getString("id");
                            Data.fbId = object.getString("id");
                        }
                        if (object.has("name")) {
                            userName = object.getString("name");
                            ;
                            Data.fbUserName = object.getString("name");
                        }
                        if (object.has("email")) {
                            userEmail = object.getString("email");
                            Data.fbUserEmail = object.getString("email");
                        }


                        if (object.has("birthday")) {
                            userBirthDay = object.getString("birthday");
                        }
                        else {
                            if (userEmail == null || "".equalsIgnoreCase(userEmail)) {
                                if (userName != null && !"".equalsIgnoreCase(userName)) {
                                    userEmail = userName + "@facebook.com";
                                    Data.fbUserEmail = Data.fbUserName + "@facebook.com";
                                } else {
                                    userEmail = id + "@facebook.com";
                                    Data.fbUserEmail = Data.fbId + "@facebook.com";
                                }
                            }
                        }



                    } catch (Exception e) {
                        e.printStackTrace();

                        LogCat.show("Error:" + e.getMessage());
                    }

                }
            });


            Bundle parameters = new Bundle();
            parameters.putString("fields", "id, name, email,birthday,gender");

            request.setParameters(parameters);
            request.executeAsync();
        }

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

            Toast.makeText(RegisterScreen.this, "CANCEL", Toast.LENGTH_SHORT).show();

        }

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

            Toast.makeText(RegisterScreen.this, "" + exception.toString(), Toast.LENGTH_SHORT).show();

        }
    });