2013-06-01 1 views
0

Facebook 로그인을 사용하는 앱에서 작업하고 있습니다. 앱을 시작할 때 Session.getActiveSession()을 호출하면 null이 반환됩니다. 나는 세션이 null인지 검사하고 만약 그렇다면 메서드 Session.openActiveSession(Activity activity, boolean allowLoginUI, StatusCallback callback)을 실행합니다.Android Facebook SDK openActiveSession (...)이 콜백을 트리거하지 않습니다.

필요한 경우 사용자 정의 로그인 활동으로 사용자를 보내려고하고 그 매개 변수를 true로 설정하면 기본 로그인 권한 창 (필요하지 않음)이 표시되므로 해당 메소드의 부울을 false로 유지하고 싶습니다. 그러나 매개 변수를 false로 설정하면 메서드는 세션 상태 변경을 트리거하지 않으며 관련 콜백 (세 번째 매개 변수)을 트리거하지 않습니다. 매개 변수를 true로 설정 한 다음 후속 대화 상자에서 나가면 콜백이 트리거됩니다.

업데이트 : 목적은 표준 LoginUi를 사용하지 않고 Session 개체를 초기화하는 것입니다. 내가 생각할 수있는 모든 것을 시도했지만 세션을 초기화 할 것이 아무것도 없다. 사용자가 로그인하지 않은 경우 LoginButton 표준을 사용하는 다른 Activity으로 변경하고 싶습니다.

@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인지 확인합니다. 어쨌든 앱을 시작할 때마다 보이는 것처럼 보이므로 필요하지 않을 수 있습니다. 그러나 핵심은 활성 세션을 여는 데 사용되는 메소드의 반환 값을 확인하고 null을 반환하는 경우 로그인 활동으로 이동하는 것입니다. 그 방법은 단지 Session의 반환 값을 검사하는 것이 아니라 메소드의 반환 값을 검사하는 것입니다.

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

onCreate() 그래서, 지금 Session.StatusCallback 모든 시간이라고

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); 
    } 

.... 물론

+0

동일한 결과가 나타납니다. 세션이 null이고 savedInstsanceState가없는 경우이 메서드는 콜백을 세션에 연결하지 않는 것처럼 보입니다. – Wenger