2013-02-25 41 views
1

嗨我目前正在使用Android的Facebook SDK 3.0。 以下是一些事實。Facebook Android SDK - 使用UiLifecycleHelper時,我應該使用Activity還是Application?

  • 而不是把我的app_id放在AndroidManifest.xml中,我以編程方式在我的java代碼中設置該值。因此,我在處理會話時使用類似下面的幫助器方法。

    if (session == null || session.isClosed()) { 
        String applicationId = Persistent.getString(null, SocialUtil.FACEBOOK_APP_ID); 
        session = new Session.Builder(Utils.ctx).setApplicationId(applicationId).build(); 
        Session.setActiveSession(session); 
    } 
    
  • 一旦與Facebook用戶登錄時,會在許多活動中使用的,這就是爲什麼我對會議提供的應用程序上下文。

正如您在會話的上下文中看到的,我提供了Utils.ctx,它是一個應用程序對象。 由於Facebook的SDK的本地UiLifecycleHelper與活動產生sesssion當會話不存在,我的應對原UiLifeCycleHelper,只是切換

session = new Session(activity); 

String applicationId = Persistent.getString(null, SocialUtil.FACEBOOK_APP_ID); 
    session = new Session.Builder(Utils.ctx).setApplicationId(applicationId).build(); 

創建了自己的FBIUiLifecycleHelper。

但是,似乎只要會話狀態在我的活動中發生變化,回調函數根本就不會被調用。我認爲這是因爲我在處理會話時使用了應用程序上下文而不是活動上下文。

我的問題是, 1.當您爲會話的上下文提供應用程序上下文或活動上下文時,它有什麼不同? 2.哪一個是推薦的練習?爲什麼? 3.讓我們說一個用戶登錄創建與活動上下文的會話。一旦這個會話被設置爲setActiveSession(),這個會話是否可以通過調用getActiveSession()在其他活動中使用?也許我真的不必在會話上下文中使用應用程序上下文?

謝謝!

回答

1

對於1.和2.,創建會話的上下文無關緊要,並且可以是任何上下文(應用程序,服務或活動)。但是當你調用任何open *方法時,你必須通過OpenRequest傳入Activity或Fragment。如果你的會話不是在狀態之間轉換,那麼這是一個問題(請在實際打開會話時發佈更多代碼,並確保在Activity或Fragment中重寫onActivityResult方法)。

對於3.,是的,你可以從任何地方調用getActiveSession(Activity,Fragment或者其他應用程序中的代碼)。

+0

非常感謝你的邀請。其實我遇到的問題是,我有一個UiLifecycleHalper,用在活動A中。在A中,如果用戶單擊一個按鈕,則活動B啓動並開始會話打開,然後活動C打開,請求用戶的一些發佈權限。當C打開時,B調用finish(),C完成後,C也調用finish(),最終顯示原始活動A.在這種情況下,奇怪的是A的onResume()被調用,儘管facebook會話更改後,UiLifecycleHelper的回調函數不會被調用。你知道什麼是錯的嗎? – user2062024 2013-02-25 23:29:17

+0

由於回調函數在登錄後不被調用,現在我只是在A的onPause()中檢查會話狀態,並在會話處於登錄狀態時執行一些操作。我想使用回調函數和UiLifecycleHelper,但因爲它沒有調用,我正在嘗試查找什麼是錯誤的......嘆息 – user2062024 2013-02-25 23:30:52

+0

當您跨多個活動執行會話管理時,UiLifecycleHelper中可能存在一個錯誤。你是否使用相同的活動會話(但只是請求新的權限)? – 2013-02-25 23:48:41

相關問題