Profile.getCurrentProfile () возвращает только мой профиль, все остальные равны нулю

Я пытаюсь создать простой вход в приложение facebook (с FB api v4.0) и получить некоторые данные о пользователе, но по какой-то причине мне удается войти в систему и получить данные только из моего личного профиля facebook, если я пытался войти в систему с профилем других пользователей я получаю null. (Я меняю настройку разработчика facebook на общедоступное приложение).

это часть моего loginButton_Fragment:

private CallbackManager callbackManager;
private FacebookCallback<LoginResult> facebookCallback = new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        AccessToken accessToken = loginResult.getAccessToken();
        Profile profile = Profile.getCurrentProfile();
        Log.d("koko",accessToken.toString() );

        if (profile != null){
            GraphRequest request = GraphRequest.newMeRequest(
                    accessToken,
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(
                                JSONObject object,
                                GraphResponse response) {
                            try {
                                user_birthDay = object.getString("birthday");
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    });
            Bundle parameters = new Bundle();
            parameters.putString("fields", "id,name,birthday");
            request.setParameters(parameters);
            request.executeAsync();
            user_name = profile.getName();
            user_id = profile.getId();
            Log.d("koko","first " +user_name + " " + user_id + " " + user_birthDay );
            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    comm.respone(user_name, user_id, user_birthDay);
                }
            }, 500);
        }
    }
    @Override
    public void onCancel () {
    }
    @Override
    public void onError (FacebookException e){
    }
};

Каждый раз, когда я вхожу в систему, я попадаю в onSuccess, но если это не мой личный профиль, значит, профиль нулевой.


person Hay Abados    schedule 12.04.2016    source источник


Ответы (2)


установить права на чтение mButtonLogin.setReadPermissions(Arrays.asList("email,public_profile","user_birthday"));

попробуй вот так

mButtonLogin.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {

            @Override
            public void onSuccess(LoginResult loginResult) {
                Log.d("status", "onSuccess");
                AccessToken accessToken = loginResult.getAccessToken();
                Profile profile = Profile.getCurrentProfile();    
                GraphRequest request = GraphRequest.newMeRequest(
                        accessToken,
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(
                                    JSONObject object,
                                    GraphResponse response) {
                                // Application code
                                try {

                                    String name = object.getString("name");
                                    String email =object.getString("email");


                                } catch (JSONException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "name,email,birthday");
                request.setParameters(parameters);
                request.executeAsync();



            }

            @Override
            public void onCancel() {

                Log.d("status", "onCancel");
            }


            @Override
            public void onError(FacebookException e) {

                Log.d("status", "onError " + e);
            }
        }
        );
person Rgv    schedule 12.04.2016
comment
Почему? все, что мне нужно, это день рождения, имя и user_id - person Hay Abados; 12.04.2016
comment
дать разрешения зависит от ваших требований - person Rgv; 12.04.2016

Вам необходимо получить разрешение от Facebook для конкретного приложения для получения личной информации пользователя, такой как birthday, user_friends и т. Д., Отправив ее на рассмотрение.

Потратьте немного времени здесь.

Если ваше приложение запрашивает такие разрешения, Facebook должен будет проверить, как ваше приложение его использует.

По умолчанию вы получите public_profile.

Проверьте это и this.

person Anoop M Maddasseri    schedule 12.04.2016
comment
как я уже сказал, все работает, когда это мой профиль, у меня есть premissoin: login_button.setReadPermissions (user_birthday); - person Hay Abados; 12.04.2016
comment
Да, это будет работать для вашего профиля, а не для других, так как вы являетесь владельцем приложения. для доступа к другим личным данным, кроме основных, отправьте приложение на проверку. - person Anoop M Maddasseri; 12.04.2016
comment
хорошо, я отключил запрос дня рождения и его работу, только без дня рождения, конечно. так что все, что мне нужно добавить, это отправить отзыв? - person Hay Abados; 12.04.2016
comment
Могу я сделать это, я не хочу публиковать это приложение? и это только для практики? - person Hay Abados; 12.04.2016
comment
Мы должны следовать тому, что говорит чиновник :) - person Anoop M Maddasseri; 12.04.2016