Facebook Android SDK 4.14.0获得生日

时间:2017-07-20 11:46:07

标签: android facebook facebook-android-sdk

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

LoginButton CallBacks:

 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响应仅返回我的帐户的ID和名称,电子邮件和性别,但不包括生日。我错过了什么吗?

3 个答案:

答案 0 :(得分:4)

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

  • ID
  • 名称
  • 如first_name
  • 姓氏
  • AGE_RANGE
  • 链接
  • 性别
  • 区域设置
  • 图片
  • 时区
  • updated_time
  • 验证

有关详细信息,请参阅此link

中的以下文档

答案 1 :(得分:1)

  

如果您的应用请求此权限,Facebook将不得不审核如何   你的应用程序使用它。 link

Facebook默认不提供用户生日。您必须使用扩展权限。

答案 2 :(得分:1)

我通过Facebook开发者控制台启用我的应用程序中的Birthday权限来解决此问题。

 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();

        }
    });