2013-04-24 86 views
0

我有以下facebook sdk 3.0.1的場景。當用戶首次登錄並選擇「FB登錄」時,SSO啓動,新的會話打開並且一切正常。但是,當用戶關閉應用程序並重新啓動時 - 我不明白如何獲取上一次打開的會話,目前我正在打開一個新會話,並且用戶再次看到FB進度條(當它正在連接到FB再次,即使如此,用戶已經批准了FB在他的最後一次運行)。有人知道如何跳過這個操作嗎?使用last session的Android facebook sdk 3.0.1

編輯1:

這是我如何檢索會話:

public void tryRetrievFacebookSession() { 
    Session session = Session.getActiveSession(); 

    if (session != null && session.isOpened()) 
     return; 

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

     @Override 
     public void call(Session session, SessionState state, Exception exception) { 
      MobliLog.d("SplashScreen", "Inside call() with session with state: " + session.getState()); 
      // onSessionStateChanged(session, state, exception); 
     } 
    }); 

} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Session session = Session.getActiveSession(); 

    if (session != null) 
     session.onActivityResult(this, requestCode, resultCode, data); 

    uiHelper.onActivityResult(requestCode, resultCode, data); 

} 

通常被創建或從LoginButton或與行的會議:

session = Session.getActiveSession(); 

    if (session.getState().isClosed()) 
     session = new Session(this); 

    if (session.isOpened()) { 
     onAuthenticationEndListener.onSuccessfullAuthentication(); 
     return; 
    } else { 
     this.onFacebookAuthenticationEndListener = onAuthenticationEndListener; 
     Session.setActiveSession(session); 
     session.openForRead(new Session.OpenRequest(SocNetwksCompatScreen.this).setCallback(null)); 
     return; 
    } 

資料1 :

當我在做第一個會話session = Session.getActiveSessi上();在SSO身份驗證後登錄,我的會話狀態下關閉的但是打開

信息2: 我使用uiHelper並初始化它像這樣:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    twitter = SocialPluginsUtils.getTwitterClient(); 

    uiHelper = new UiLifecycleHelper(this, statusCallback); 
    uiHelper.onCreate(savedInstanceState); 
} 

現在,我知道後,我執行Session.getActiveSession();會話狀態應該是OPENED,然後OPEN,然後uiHelper的回調應該被調用。在我的代碼中,狀態爲CLOSED或CLOSED_LOGIN_FAILED或CREATED(不知道爲什麼它不穩定),其他情況不會發生

回答

0

問題已解決。我不小心調用了session.closeAndClearTokenInformation();在onStop()(是的,這麼愚蠢!)

+0

您已遵循哪個教程? – keen 2013-07-08 10:10:14

+0

https://developers.facebook.com/docs/tutorial/iossdk/upgrading-from-2.0-to-3.1/ – Nativ 2013-07-08 11:27:06

2

事實上,每當用戶關閉應用程序時,會話都會關閉。
因此,如果Session.getActiveSession()返回一個空會話,你只需要撥打Session.openActiveSession(activity, true, sessionCallback)

如果有一個有效的令牌緩存,這個方法將使用它來打開一個新的會話,而不需要用戶插入任何數據。否則,這將顯示具有基本權限的默認對話框。

+0

它不適用於我,我一直在進入回調只是會議與OPENNING狀態,而不是開放狀態 – Nativ 2013-04-24 11:50:19

+0

如果這是問題,你只需要添加此 'Session session = Session.getActiveSession(); if(session!= null){session}。onActivityResult(this,requestCode,resultCode,data)' on'onActivityResult' – 5agado 2013-04-24 11:53:18

+0

看到我的新編輯請 – Nativ 2013-04-24 12:32:40

0

從我可以看到您編輯後,也許問題是與您管理會話的方式有關。 我在我的項目使用此代碼:

Session session = Session.getActiveSession(); 

    if (session == null){ 
     Session.openActiveSession(activity, true, sessionCallback); 
    } 

    else if (!session.getState().isOpened()){ 
     session.openForRead(new Session.OpenRequest(activity) 
       .setCallback(sessionCallback)); 
        //this will open the session with basic read permissions 
    } 

    else {   
     //do what you want with the opened session 
    } 

而且如果使用UiLifecycleHelper你不需要兩行的代碼,我建議你在評論,他們已經在助手的方法。但是您必須確保在活動的每個相關方法(onResume,onPause等)中調用幫助程序的所有方法

如果沒有令牌緩存,openActiveSession(activity, true, sessionCallback)將自動調用新的對話框,如果用戶登錄成功後,新的令牌緩存將可用於將來的使用。

+0

你知道我是否需要打開最後一個來自我打開它的同一活動的會話? – Nativ 2013-04-24 18:07:09

+0

隨着你的代碼,我剛剛得到另一個狀態爲CREATED的會話,並出現對話框。我不想讓對話出現,我只想回顧最後一次會議。我不相信這個愚蠢的任務需要我很長時間!愚蠢的Facebook! – Nativ 2013-04-24 18:13:50

+0

您需要管理每個活動中想要向Facebook發出請求的會話(請參閱[我的其他答案](http://stackoverflow.com/questions/16055561/managing-facebook-session-in-android-app-throughout -multiple-activities-with-fac/16062629#16062629)) 對於第一次登錄和每次令牌過期,都需要一個對話框。 – 5agado 2013-04-24 20:01:25

相關問題