2010-02-09 48 views
0

我已經做了很多Facebook文檔的閱讀,但我對會話對象的角色很困惑。例如,與方法:Facebook Connect中的會話對象混淆iPhone

session = [FBSession sessionForApplication:myApiKey secret:myAppSecret delegate:self]; 

那我該怎麼辦與同時退還給我的會話對象,當想必我需要等待委託回調,以做什麼?

其次......在稍後執行我的應用時,當用戶授權我在上次執行期間訪問他們的帳戶時,如何獲得對會話對象的引用,以便我可以連接到他們的Facebook帳戶併發布信息狀態等?文檔提到[session resume],但不要說會話引用應該來自哪裏。 (並調用[[FBSession會話]恢復]編譯,但不起作用。)

謝謝。

回答

2

我應該怎樣處理返回給我的會話對象,當然我需要等待委託回調才能做任何事情?

您必須創建並向用戶顯示FBLoginDialog。在用戶登錄之前,委託方法不會被調用。它與首先創建會話實例無關。

我怎麼得到一個會話對象的引用,這樣我就可以連接到他們的Facebook賬戶

的Facebook連接庫將保存在您的應用程序的用戶默認的會話信息。你不需要做任何事情來存儲它。據我瞭解,每次啓動應用程序時,您應該使用+sessionForApplication:secret:delegate:創建會話對象,然後致電[session resume]。如果FBConnect庫找到以用戶默認值存儲的有效會話,則會返回YES,您可以在用戶現在登錄時繼續。如果resume返回NO,則必須顯示登錄對話框。

Facebook's docs

會話信息將存儲在您的應用程序的首選項的iPhone磁盤上,這樣你就不必要求用戶登錄,每次使用應用程序的時間。創建會話對象後,調用[會話恢復]恢復前一會話。如果會話已過期或您尚未創建會話,則會返回NO,您將不得不要求用戶登錄。會話在兩小時不活動後過期。

+0

你說過,「據我所知,在每次啓動應用程序時,都應該使用+ sessionForApplication:secret:delegate創建會話對象,然後調用[會話繼續]。」我的問題:有效會話是來自此方法的返回值,還是傳遞給委託的會話對象?如果是前者,爲什麼我需要委託人? (由於委託會導致它崩潰,所以傳遞nil)。如果是後者,返回的會話對象又有什麼意義?謝謝。 – 2010-02-09 07:49:55

+0

兩者都是相同的對象,因此同樣有效。委託方法通常包含委託對象作爲參數,以便程序員可以識別委託消息是關於哪個對象。至於你的問題,「爲什麼我需要一個委託?」:因爲創建會話與登錄不同。正如我所說,創建會話對象後,你需要調用FBLoginDialog,然後FBSession將使用委託方法在用戶實際登錄時通知您。此時,您可以繼續使用會話。 – 2010-02-09 11:39:19

+0

謝謝...但是如果我知道用戶已經登錄?那麼我不需要顯示登錄對話框。我不想每次都彈出Facebook對話框(如果我打電話給FBDialog,如果用戶已經登錄,它會彈出,然後關閉,這會讓人分心)。 – 2010-02-09 17:57:48

1

這真的是來自Ole的回答和評論,因爲它全部在那裏。這就是我所做的。

首先創建會話對象:

facebookSession = [[FBSession sessionForApplication:SESSION secret:SECRET delegate:self]retain];  
[facebookSession resume]; 

第二行設置文件拉動會話數據,讓你登錄,如果用戶指定他們希望保持登錄。

您必須實現的方法:

- (void)session:(FBSession*)session didLogin:(FBUID)uid 

雖然我不使用它的任何東西。

要檢查,如果用戶已經登錄,我呼籲:

[[FBSession session] isConnected] 

,然後要麼顯示登錄對話框或直接到發佈對話框,如果他們已經登錄。