2013-06-01 3 views
0

Я работаю над приложением, использующим Facebook. При запуске приложения вызов Session.getActiveSession() возвращает null. У меня есть проверка, чтобы проверить, является ли сеанс нулевым, и если это так, запустите метод Session.openActiveSession(Activity activity, boolean allowLoginUI, StatusCallback callback).Android Facebook SDK openActiveSession (...) не вызывает обратный вызов

Я хочу сохранить логическое значение в этом методе равным false, потому что я хочу, если нужно, отправить пользователю пользовательскую активность входа и установить этот параметр в значение true, чтобы вызвать основное окно разрешений для входа (не желательно). Но когда я устанавливаю параметр в значение false, этот метод даже не вызывает изменение состояния сеанса и не вызывает связанный обратный вызов (третий параметр). Если я установил параметр в значение true, а затем вернулся из последующего диалога, срабатывает триггер.

UPDATE: Цель состоит в том, чтобы инициализировать объект Session без использования стандартного LoginUi. Я пробовал все, что мог, и ничего не инициализирует сессию. Если пользователь не вошел в систему, я хочу перейти на другой Activity, где у меня есть стандарт LoginButton.

Вот код, я использую:

@Override 
public void onCreate(Bundle savedInstanceState) { 

    Session.StatusCallback callback = new Session.StatusCallback() { 
     @Override 
     public void call(Session session, SessionState state, Exception exception) { 
      Log.i("MainActivity", "calling session callback"); 
      onSessionStateChange(session, state, exception); 
     } 
    }; 
    session = Session.getActiveSession(); 
    if(session==null){ 
     Log.i("MainActivity", "session is null"); 
     Session.openActiveSession(this, false, callback); 
    } 
    else{ 
     if(session.isClosed()){ 
      Log.i("MainActivity", "session is closed"); 
      startActivityForResult(new Intent("<custom login activity>"), LOGIN_REQUEST); 
     } 
     else if(session.isOpened()){ 
      Log.i("MainActivity", "session is opened"); 
      initializeActivity(); 
     } 
    } 
    uiHelper = new UiLifecycleHelper(this, callback); 
    uiHelper.onCreate(savedInstanceState); 
} 

ответ

3

Конечно после того, как Я приношу щедрость, я понимаю.

Сначала я проверяю, является ли Session нулевым, что кажется, что каждый раз, когда я запускаю приложение, так что это может быть необязательно. Но ключ должен проверить возвращаемое значение метода, используемого для открытия активного сеанса, и перейти к активности входа, если он возвращает значение null. Таким образом, я не просто проверяю возвращаемое значение Session, но возвращаемое значение метода.

if(Session.openActiveSession(this, false, callback) == null){ 
    //Start login activity 
} 
0

Попробуйте это в вашем onCreate()

Session session = Session.getActiveSession(); 
    if (session == null) { 
     if (savedInstanceState != null) { 
      session = Session.restoreSession(activity, null, callback, savedInstanceState); 
     } 
     if (session == null) { 
      session = new Session(activity); 
     } 
     Session.setActiveSession(session); 
    } 

Итак, теперь Session.StatusCallback называется все время ....

+0

Получаю тот же результат. Похоже, что этот метод не связывает обратный вызов с сеансом, если сеанс имеет значение null и нет сохраненногоInstsanceState. – Wenger

Смежные вопросы