Запрос дополнительного разрешения на новый SDK, но в диалоговом окне отображается форма входа

В предыдущем Android SDK я запросил новое разрешение, позвонив Facebook.authorize(), и он показал экран одобрения разрешения. Но в SDK 3.0, когда я вызываю FacebookActivity.openSessionForPublish(), в диалоговом окне всегда отображается форма входа. Как я могу отобразить экран утверждения разрешения?

Я настроил сеанс с токеном и датой истечения срока действия, а его SessionState — CREATED_TOKEN_LOADED .

Есть ли какие-либо требования для отображения диалога разрешений или Facebook.authorize() всегда показывает форму входа? Тогда, пожалуйста, научите меня правильному методу для этого.

Мой код, как показано ниже

 public class FbConn extends FacebookActivity {
    public void onCreate(Bundle savedInstanceState) {
       ...
       if( savedInstanceState == null ) {
          Session savedSession = CommonUtil.getFbSession(CustomSessionStore.getFbInfo(getApplicationContext())); //get access token and expiration date from session store and set up new session.
          Session.setActiveSession(savedSession); 
          setSession(savedSession);
       }

    }

    protected void onStart() {
       super.onStart();
       openSessionForPublish(EpisodeApplication.config.getSelectedServer().fbAppId, Constants.FB_PERMISSIONS);
    }

 }

Обновить

Я закомментировал эти строки, и экран запроса разрешения успешно отобразился. Но я не уверен, что это правильный путь или нет.

В com.facebook.LoginActivity строке 62,

Utility.clearFacebookCookies(this);

В com.facebook.Session строке 1202,

Utility.clearFacebookCookies(getStaticContext());

person kingori    schedule 07.11.2012    source источник
comment
Мне трудно понять, в чем проблема. Вы говорите, что каждый раз, когда вы запускаете свое приложение, появляется диалоговое окно входа в систему, даже если пользователь уже прошел аутентификацию?   -  person Jesse Chen    schedule 07.11.2012
comment
@JesseChen спасибо. Я обновил вопрос. У меня нет проблем с использованием сохраненного сеанса. Но когда приложение запрашивает дополнительное разрешение facebook, новый SDK всегда отображает форму входа (а не экран проверки разрешений), даже если сеанс имеет действительную информацию о токене.   -  person kingori    schedule 07.11.2012


Ответы (1)


Если у вас уже есть действительный сеанс из предыдущего потока аутентификации, то, если вы хотите запросить новые разрешения, используйте класс Session.ReauthorizeRequest.

Session.ReauthorizeRequest reauthRequest = new Session
                .ReauthorizeRequest(this, Constants.FB_PERMISSIONS);
session.reauthorizeForPublish(reauthRequest);

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

Однако, глядя на вашу логику, неясно, где вы обрабатываете первый вход в систему. Если вы ожидаете справиться с этим в этом классе, я предлагаю использовать следующее:

Session.openActiveSession(this, true);

Это откроет форму входа, если нет кэшированного токена. Если есть кешированный токен, он создаст новый сеанс и сделает его активным. Это откроет сеанс с базовыми разрешениями (если пользователю необходимо войти в систему) или откроет сеанс с разрешениями на основе полученного кэшированного токена. Затем вы можете вызвать методы повторной аутентификации, чтобы запросить разрешения на публикацию. Вы захотите сделать это в контексте и, как правило, не хотите вызывать функции аутентификации один за другим, т. Е. Войти пользователя в систему, а затем немедленно запросить разрешения на публикацию.

person C Abernathy    schedule 07.11.2012
comment
здорово. Это работает отлично. Поскольку я запрашиваю настраиваемые разрешения, ваше предложение мне не подходит. Но это очень полезно. Спасибо еще раз. - person kingori; 08.11.2012
comment
В последней версии SDK Facebook v3 нет класса Session.ReauthorizeRequest. - person uthark; 18.04.2013