Facebook登录获取用户生日和电子邮件android

时间:2016-12-20 05:22:34

标签: android facebook facebook-graph-api

当用户使用facebook登录我的应用时,我正在尝试获取用户的电子邮件和生日。

这就是我尝试这样做的方式:

public class MainActivity extends AppCompatActivity {

private LoginButton facebookLoginButton;
private CallbackManager callbackManager;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(getApplication());
    callbackManager = CallbackManager.Factory.create();

    setContentView(R.layout.activity_main);

    facebookLoginButton = (LoginButton)findViewById(R.id.fb_login_button);
    facebookLoginButton.setReadPermissions(Arrays.asList("email","public_profile", "user_birthday"));

        facebookLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            GraphRequest.newMeRequest(
                    loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject me, GraphResponse response) {
                            if (response.getError() != null) {
                                // handle error
                            } else {
                                String email = me.optString("email");
                                String name = me.optString("name");
                                String birthday = me.optString("user_birthday");

                                System.out.println(email);
                                System.out.println(name);
                                System.out.println(birthday);
                            }
                        }
                    }).executeAsync();


            String userID = loginResult.getAccessToken().getUserId();
            String AuthToken = loginResult.getAccessToken().getToken();
            System.out.println(userID);
            System.out.println(AuthToken);

        }

只有name,userID和AuthToken打印成功,我没有获得生日和电子邮件的值(我使用电子邮件为我的Facebook帐户并提供生日,所以应该有价值)。

我使用了错误的权限吗?

1 个答案:

答案 0 :(得分:2)

使用此

替换GraphRequest代码
GraphRequest mGraphRequest = GraphRequest.newMeRequest(
                loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject me, GraphResponse response) {
                        if (response.getError() != null) {
                            // handle error
                        } else {
                            String email = me.optString("email");
                            String name = me.optString("name");
                            String birthday = me.optString("user_birthday");

                            System.out.println(email);
                            System.out.println(name);
                            System.out.println(birthday);
                        }
                    }
                });
            Bundle parameters = new Bundle();
            parameters.putString("fields", "id,name,email,gender, birthday");
            mGraphRequest.setParameters(parameters);
            mGraphRequest.executeAsync();


        String userID = loginResult.getAccessToken().getUserId();
        String AuthToken = loginResult.getAccessToken().getToken();
        System.out.println(userID);
        System.out.println(AuthToken);

    }