在Facebook Android API中访问用户生日时不存在字段错误

时间:2016-12-28 14:30:26

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

我想访问用户生日&性别,但我在尝试访问生日时收到错误。我使用的是Facebook SDK版本facebook-android-sdk:4.18.0。

它给了我这个错误:

  

{响应:responseCode:400,graphObject:null,错误:{HttpStatus:   400,errorCode:100,errorType:OAuthException,errorMessage:(#100)   尝试在节点类型上访问不存在的字段(user_birthday)   (用户)}}

这是我的代码:

public class MainActivity extends AppCompatActivity {
    private CallbackManager callbackManager;
    private TextView info;
    private LoginButton loginButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();

        setContentView(R.layout.activity_main);
        info = (TextView)findViewById(R.id.info);
        loginButton = (LoginButton)findViewById(R.id.login_button);
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                GraphRequest request = GraphRequest.newMeRequest(
                        loginResult.getAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject object, GraphResponse response) {
                                Log.v("LoginActivity", response.toString());

                                // Application code
                                String email = object.optString("email");
                                String birthday = object.optString("birthday");
                                String name = object.optString("name"); // 01/31/1980 format
                                info.setText("email:  " +
                                        email + "\n" +
                                        "birthday " + birthday+
                                "\n name"+name);
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,email,gender,user_birthday");
                request.setParameters(parameters);
                request.executeAsync();

            }

            @Override
            public void onCancel() {
                info.setText("Login attempt cancelled.");
            }

            @Override
            public void onError(FacebookException e) {
                info.setText("Login attempt failed.");
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
}

2 个答案:

答案 0 :(得分:8)

在参数中,您应该使用birthday而不是user-birthday:

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

有关用户生物的可用字段,请参阅文档: https://developers.facebook.com/docs/graph-api/reference/user/

答案 1 :(得分:1)

某些Facebook集成需要在公众使用之前获得批准。

否则,您将收到如下错误消息:

Facebook error: “(#100) Tried accessing nonexisting field (user_birthday) on node type (User)”

在获得Facebook的审核和批准之前,您的应用只能使用公开用户的个人资料和电子邮件。

请参阅下一个有用的建议:

  

访问一个人的出生日期和月份。访问一个   一个人的出生年份取决于他们的隐私设置和   用于请求此字段的访问令牌。

     

请注意,大多数集成只需要age_range字段。

     

检查是否有应用程序请求此权限,Facebook专家   应该检查它的使用方式。

     

在发送申请进行审查时,应确切说明原因   在这种情况下,age_range权限还不够。

下一个链接将对此有所帮助:

https://developers.facebook.com/docs/facebook-login/permissions#reference-user_birthday https://developers.facebook.com/docs/facebook-login/review/how-to-submit