Session.getActiveSession () возвращает null при запуске приложения, хотя я подключен

Я использую com.facebook.widget.UserSettingsFragment для управления входом / выходом в Facebook в моем приложении:

UserSettingsFragment userSettingsFragment = new UserSettingsFragment(); Session session = Session.getActiveSession(); if(session==null || session.isClosed()){ userSettingsFragment.setPublishPermissions(Arrays.asList("publish_actions")); } fragmentTransaction.replace(R.id.content_container, userSettingsFragment, "userSettingsFragment"); 

В другом Fragment (но такое же действие), перед публикацией на Facebook я проверяю, зарегистрирован ли я, используя

 Session session = Session.getActiveSession(); if (session != null && session.isOpened()){ publishOnFacebook(intent.getExtras()); } 

Когда я запускаю свое приложение и пытаюсь опубликовать его, я всегда получаю null Session хотя ранее я входил в систему. И когда я запускаю UserSettingsFragment , он показывает мне, что я подключен.

Как может Session.getActiveSession(); Быть null если я действительно подключен?

Более того, если я запускаю Fragment где я делаю публикацию сразу после UserSettingsFragment , я получаю правильный Session , то есть:

 1 start the app 2 call `Session.getActiveSession()` in another `Fragment` returns `null` 3 start `UserSettingsFragment` shows that I'm log 

но

 1 start the app 2 start `UserSettingsFragment` shows that I'm log 3 call `Session.getActiveSession()` in another `Fragment` returns a session 

Кто-нибудь может помочь?

Хорошо, я только что прочитал об openActiveSessionFromCache (а не от Facebook doc):

 Session session = Session.getActiveSession(); if(session==null){ // try to restore from cache session = Session.openActiveSessionFromCache(getActivity()); } if(session!=null && session.isOpened()){ publishOnFacebook(intent.getExtras()); } else{ login(); } 

Ответ Юля не работает для меня. Поэтому я попробовал это:

Если вы зарегистрировались ранее, и если вы перезапустили приложение, тогда сеанс может быть недействительным, и он может находиться в состоянии CREATED_TOKEN_LOADED. Это состояние подразумевает, что сессия еще не открыта и имеет кеш-ключ. Открытие сеанса в этом состоянии не будет включать взаимодействие с пользователем. Чтобы открыть сеанс из этого состояния, вы можете вызвать метод session.openForRead (null). Это немедленно открывает сеанс без какого-либо взаимодействия с пользователем.

Поэтому проверьте это, добавьте следующий код:

 Session session = Session.getActiveSession(); if (session != null){ if(session.getState() == SessionState.CREATED_TOKEN_LOADED){ //this immediately opens the session session.openForRead(null); } if(session.isOpened()) { publishOnFacebook(intent.getExtras()); } else{ //start the facebook login fragment or activity login(); } } else{ login(); }