Как дать Facebook разрешение на доступ к данным пользователя в facebook-sdk-3.0

Я разрабатываю приложение, в котором я использую Facebook логин для аутентификации и прочего. facebook sdk 3.0 требуется некоторое разрешение для доступа к данным пользователя, таким как изображение профиля, идентификатор электронной почты, publish_stram и т. д. Как дать разрешение в коде для доступа к этим вещам. До сих пор я могу получить fb_access_token. Вот мой код:

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

            // callback when session changes state
            @Override
            public void call(Session session, SessionState state,
                    Exception exception) {
                if (session.isOpened()) {
                    // make request to the /me API
                    Request.executeMeRequestAsync(session,
                            new Request.GraphUserCallback() {

                                // callback after Graph API response with
                                // user
                                // object
                                @Override
                                public void onCompleted(GraphUser user,
                                        Response response) {
                                    if (user != null) {
                                        fb_user_id = user.getId();
                                    }

                                    Session session = Session
                                            .getActiveSession();
                                    if (session.isOpened()) {
                                        access_token = session
                                                .getAccessToken();
                                    }

                                    new postFBData().execute();
                                }
                            });
                }
            }
        });

Взято этот фрагмент кода из образцов Facebook. Как дать разрешение перед доступом к access_token из FB?

Любая помощь будет оценена.


person Anupam    schedule 05.03.2013    source источник


Ответы (2)


Вызов Session.openActiveSession даст вам только базовые разрешения (пока вы не запросите дополнительные). Вам также необходимо разделить запросы на чтение и публикацию.

В вашем случае я бы сделал что-то вроде:

Session session = // create a new Session using Session.Builder
Session.OpenRequest openRequest = // create an OpenRequest using Session.OpenRequest
openRequest.setPermissions( READ_PERMISSION_LIST );
session.openForRead(openRequest);
Session.setActiveSession(session);

Затем, как только вы открыли сеанс,

// check if you already have publish permissions first
if (!Session.getActiveSession.getPermissions.contains("publish_stream")) {
  Session.NewPermissionsRequest permissionRequest = // create a NewPermissionsRequest
  permissionRequest.setPermissions( PUBLISH_PERMISSION_LIST);
  Session.getActiveSession().requestNewPublishPermissions(permissionRequest);
}
person Ming Li    schedule 05.03.2013
comment
Мне нужно получить столько разрешений user_photos,user_videos,publish_stream,offline_access,read_stream,user_checkins,friends_checkins,friends_likes,email,user_likes. Можете ли вы сказать, куда поместить приведенный выше код и когда вызывать эти методы доступа? - person Anupam; 05.03.2013
comment
это все разрешения на чтение, за исключением publish_stream. Как правило, все, что связано только с доступом к данным, является разрешением на чтение, а все, что может изменять пользовательские данные (включая разрешения на управление и некоторые связанные с событиями), является разрешением на публикацию. - person Ming Li; 06.03.2013
comment
сообщение все еще fb.request ()? - person JRowan; 06.03.2013
comment
Все методы в классе Facebook объявлены устаревшими и предназначены только для обратной совместимости. Появился новый класс Request для отправки графических запросов и руководство по обновлению с 2.0 до 3.0 developers.facebook.com/docs/tutorials/androidsdk/3.0/ - person Ming Li; 06.03.2013
comment
@MingLi Можете ли вы помочь мне с этим? stackoverflow.com/questions/16332283/ Я не получаю ответа на этот вопрос. - person Anupam; 02.05.2013

я думаю, что именно так вы разрешаете определенные функции в String[]

 fb.authorize(MainActivity.this,new String[] {"publish_stream"}, new DialogListener(){

            @Override
            public void onFacebookError(FacebookError e)
            {
                Toast.makeText(MainActivity.this, "on Facebook error", Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onError(DialogError e)
            {
                Toast.makeText(MainActivity.this, "on error", Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onComplete(Bundle values)
            {
                updateButtonImage();

            }
            @Override
            public void onCancel()
            {

            }
        });
person JRowan    schedule 05.03.2013
comment
Используется ли это facebook SDK v3 для v2? - person Anupam; 05.03.2013
comment
когда вы входите в систему, вы указываете разрешение, которое вам понадобится, в String [], если вы ссылаетесь на сайт, вы можете увидеть все разрешения String, которые вы действительно можете использовать. - person JRowan; 05.03.2013
comment
Пожалуйста, не используйте Facebook.authorize, если вы начинаете новый проект с v3, этот метод устарел и работает только для обратной совместимости. - person Ming Li; 05.03.2013
comment
Я понимаю, что это работает, потому что v3 обратно совместим с v2. Но он устарел, а это означает, что он не будет поддерживаться в будущем, и любой, кто начинает новый проект, НЕ должен его использовать. - person Ming Li; 06.03.2013
comment
хорошо, спасибо, я этого не знал, я сам внесу изменения, это, вероятно, избавит меня от некоторых проблем в будущем - person JRowan; 06.03.2013