Ошибка получения электронной почты и местоположения из запроса Facebook в Android

Я использую facebook sdk 3.5 в родном Android. Вот как я получаю идентификатор/имя моих друзей в Facebook:

private void onSessionStateChange(final Session session,
        SessionState state, Exception exception) {
    System.out.println("onSessionStateChanged");
    if (session != null && session.isOpened()) {
        if (state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
            tokenUpdated();
        } else {
            getUserRequest(session);
            getFriendsRequest(session);
        }
    } else {
        profilePictureView.setProfileId(null);
        userNameView.setText("");
    }
}
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(getActivity(), requestCode,
                resultCode, data);
        // uiHelper.onActivityResult(requestCode, resultCode, data,
        // nativeDialogCallback);
    }


private void getFriendsRequest(Session session) {

        session.requestNewReadPermissions(new NewPermissionsRequest(
                getActivity(), PERMISSIONS));
        final ProgressDialog dialog = new ProgressDialog(getActivity());
        // get friends details
        Request request = Request.newMyFriendsRequest(session,
                new Request.GraphUserListCallback() {

                    @Override
                    public void onCompleted(List<GraphUser> users,
                            Response response) {

                        // if no errors
                        if (response.getError() == null) {
                            if (users != null) {
                                for (GraphUser user : users) {
                                    FacebookFriend fb = new FacebookFriend(user
                                            .getId(), user.getName(), "", "",
                                            "", 0);
                                        friends.add(fb);
                                    }

....
                    }
}

Теперь ответ такой:

{Response:  responseCode: 200, graphObject: GraphObject{graphObjectClass=GraphObject, state={"data":[{"id":"213","name":"Test name"}]}}, error: null, isFromCache:false}

Здесь все отлично, но таких деталей, как электронная почта (если она предоставлена), местоположение, имя пользователя нет в :

GraphObject{graphObjectClass=GraphUser, state={"id":"60711232217","name":"Test"}}

Где я должен установить разрешения? Это мой запрос:

{Request:  session: {Session state:OPENED, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[email, user_location, user_friends, friends_location, basic_info]}, appId:111111}, graphPath: me/friends, graphObject: null, restMethod: null, httpMethod: GET, parameters: Bundle[{access_token=dasdasdasdasdsada, format=json, sdk=android, migration_bundle=fbsdk:20130708}]}

Где я должен добавить эти разрешения, чтобы получить более подробную информацию?

Спасибо.


person Gabriela Radu    schedule 13.09.2013    source источник
comment
Вы определили email разрешение?   -  person sromku    schedule 13.09.2013
comment
Вот как я добавил разрешения: private static final String[] PERMISSIONS = new String[] { email, basic_info, user_location, friends_location }; окончательный сеанс сеанса = Session.getActiveSession(); session.requestNewReadPermissions(new NewPermissionsRequest(getActivity(), РАЗРЕШЕНИЯ));   -  person Gabriela Radu    schedule 13.09.2013
comment
Если в Facebook sdk я оставлю URL-адрес: я/друзья, а затем сделаю запрос, это будет выглядеть так: {Запрос: сеанс: {Состояние сеанса: ОТКРЫТ, токен: {Токен доступа: ACCESS_TOKEN_REMOVED, разрешения: [электронная почта, user_location, user_friends, friends_location, basic_info]}, appId: 464998303608448}, graphPath: я/друзья, graphObject: null, restMethod: null, httpMethod: GET, параметры: Bundle[{access_token=.., format=json, sdk=android , migration_bundle=fbsdk:20130708}]}, поэтому права доступа к электронной почте и местоположению есть. Но ответ по-прежнему содержит данные идентификатора/имени пользователя.   -  person Gabriela Radu    schedule 13.09.2013
comment
Если вы используете тот же запрос в инструменте Graph, developers.facebook.com/tools/explorer , вы получаете ту же ошибку? Кстати, приложения не могут получить адреса электронной почты друзей пользователя написано здесь   -  person sromku    schedule 13.09.2013
comment
используя токен доступа из запроса, я получаю данные (но мои, а не мои друзья): { id: .., name: ..., email: ...., location: { id: ..., name: Sibiu , Румыния } } Значит ли это, что мне нужен другой токен доступа?   -  person Gabriela Radu    schedule 13.09.2013
comment
Ваш токен доступа в порядке. Используя запрос: me/friends?fields=id,name,location,email вы должны получить информацию о своих друзьях, а не о своих, и email ваших друзей не будут получены ни с каким токеном доступа   -  person sromku    schedule 13.09.2013
comment
Я понимаю, что вы имеете в виду, очень смущен тем, почему я не получаю никакой информации, кроме идентификатора / имени пользователя моих друзей.   -  person Gabriela Radu    schedule 13.09.2013
comment
Я надеюсь, что мне не нужно создавать запрос для каждого из моих друзей, чтобы получить данные. Используя GraphApi Explorer, если я пишу идентификатор пользователя и запрашиваю местоположение, я получаю данные, но это будет означать сотни запросов для этого, и это неприемлемо. :(   -  person Gabriela Radu    schedule 13.09.2013


Ответы (3)


Перейдите по этой ссылке Graphapilink

Щелкните значок Graph API Explorer -> Затем выберите имя приложения «YourApplication» -> Затем нажмите GetAccesTocken. Он покажет всплывающее окно «Выбор разрешения». -> Затем выберите вкладку «Расширенное разрешение».

введите здесь описание изображения

Наконец, вам будет предложено выбрать необходимое разрешение, как показано на картинке выше.

person Satheesh    schedule 18.09.2013
comment
Если у вас есть сомнения, спросите меня - person Satheesh; 18.09.2013
comment
@Satheesh Привет, Сатиш, я не смог найти разрешение на получение изображения профиля пользователя. Не могли бы вы сказать мне, как я могу дать это разрешение? - person Kunu; 08.02.2014
comment
@kunu извините, я не знаю, что - person Satheesh; 10.02.2014

  • Facebook не разрешает приложениям получать доступ к электронной почте друзей

Для остальных см. изображения ниже. Вы должны установить правильные разрешения и посмотреть, как это работает в моем профиле.

введите здесь описание изображения

введите здесь описание изображения

И результат, который вы получите

введите здесь описание изображения

person Augustus Francis    schedule 18.09.2013
comment
это работает из графического API на сайте, но не в коде. :( - person Gabriela Radu; 24.09.2013
comment
@Augustus Francis Я не смог найти разрешение на получение изображения профиля пользователя. Не могли бы вы сказать мне, как я могу дать это разрешение? - person Kunu; 08.02.2014

Ваш запрос:

"me/friends?fields=id,name,location,email"

Это означает, что вы пытаетесь получить имя, местоположение, адрес электронной почты. Вы можете получить имя, но для местоположения вам потребуется разрешение friends_location; для электронной почты — facebook не позволяет вам получать электронные письма друзей.

Я надеюсь, что мне не нужно создавать запрос для каждого из моих друзей, чтобы получить данные

Конечно, нет. Ваш запрос правильный, вы получите массив в результате, как-

{
  "data": [
    {
        "name": Friend1_Name, 
        "location": {
           "id": Friend1_LocationID, 
           "name": Friend1_Location
        }, 
        "id": Friend1_ID
    }, 
    {
        "name": Friend2_Name, 
        "location": {
           "id": Friend2_LocationID, 
           "name": Friend2_Location
        }, 
        "id": Friend2_ID
    }, 
    ....
    ....
 ]
}

Прямая демонстрация


Если вы получаете-

"Токен активного доступа должен использоваться для запроса информации о текущем пользователе".","type":"OAuthException"

Это означает, что (текущий) пользователь не вошел в ваше приложение или сеанс истек. Итак, войдите/авторизуйте пользователя, затем сделайте вызов API.

person Sahil Mittal    schedule 16.09.2013
comment
ауч, это было бы странно, я могу понять логику вышесказанного, но для меня это странно, потому что я могу повторно войти в систему, когда захочу. - person Gabriela Radu; 18.09.2013
comment
Что ты пытаешься сказать? В чем путаница? - person Sahil Mittal; 18.09.2013
comment
это ошибка, которую я получаю: {Session state:OPENED, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[email, user_location, user_friends, friends_location, basic_info]}, appId:42434}. мое замешательство в том, почему токен доступа удален. Я могу войти, но он удален, чтобы запросить список друзей? - person Gabriela Radu; 24.09.2013
comment
Вы авторизовали пользователя? Пожалуйста, обновите вопрос, указав код входа/аутентификации, который вы использовали. Ваша ошибка просто означает, что в текущем сеансе нет пользователя. /me можно использовать только после того, как пользователь войдет в ваше приложение и войдет в сеанс - person Sahil Mittal; 24.09.2013