0

我正在使用 Facebook SDK(facebook-android-sdk-3.16) 并尝试检索用户 public_profile 信息。

但是当我尝试让用户生日时,它总是给我 null

这是我的代码:

public void onClick(View view) {

    openActiveSession(_mActivity, true, new Session.StatusCallback() {                  

        @Override
        public void call(Session session, SessionState state, Exception exception) {
            if (session.isOpened()) {

                Log.v(APP_TAG, " ============== " + session.getPermissions());
                Log.v(APP_TAG, " ============== " + session.isPermissionGranted("user_birthday"));
                //make request to the /me API);
                Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        Log.d(APP_TAG, " ============== " + response);
                        if (user != null) {

                            _medtFName.setText(user.getFirstName());
                            _medtLName.setText(user.getLastName());
                            _medtEmailAddress.setText(user.getProperty("email").toString());
                            Log.i(APP_TAG, " ============== " + user.getBirthday());                                    

                            Log.i(APP_TAG, " ============== " + user.getProperty("gender").toString());
                        }
                    }
                });
             }
         }
     });
}


private static Session openActiveSession(Activity activity, boolean allowLoginUI, Session.StatusCallback callback) {
    Session.Builder builder = new Builder(activity);
    Session session = builder.build();
    Session.OpenRequest openRequest = new OpenRequest(activity);
    List<String> permission=new ArrayList<String>();
    permission.add("user_birthday");
    permission.add("user_likes");
    permission.add("user_location");
    permission.add("email");

    if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) {

        openRequest.setPermissions(permission);
        Session.setActiveSession(session);//This will take care of the null pointer
        openRequest.setCallback(callback);//the callback
        session.openForRead(openRequest);
        return session;
    }
    return null;
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(_mActivity, requestCode, resultCode, data);
}

当我试图打电话给session.isPermissionGranted("user_birthday")它的时候false

我如何获得user_birthday的许可

4

2 回答 2

1

您将获得空值,因为您需要 Facebook 审核您的 APK 以获得用户的生日,如果您尝试使用开发人员的 Facebook 帐户(已创建 Facebook 应用程序)登录,您将获得生日,但对于一般公众访问,您必须提供 APK供 Facebook 审核。

如果您有任何疑问,请告诉我。

于 2015-05-21T14:25:18.343 回答
0

对于生日和电子邮件地址,您无法在此通话中第一次(登录身份验证)通话,您只能获得用户一般配置文件只有几个参数。如果您想获取出生日期/电子邮件/朋友列表,那么您必须在具有特定权限的情况下进行单独的通话后身份验证。要获得许可,请通过以下链接 https://developers.facebook.com/docs/facebook-login/permissions

于 2014-07-28T06:41:36.037 回答