2012-10-02 130 views
5

我們希望升級到3.x,這樣我們的iOS 6/iPhone 5用戶將擁有最簡單的FB體驗......因爲我面對的是FB集成重寫,還是我可以使用折舊的頭文件並繼續在3.1 SDK中使用2.x API?從Facebook iOS SDK 2.x遷移到3.x的問題

一些關鍵的方法,我們正在依靠請求是: [ad.facebook認證:燙髮],shouldExtendAccessToken,extendAccessTokenIfNeeded,isSessionValid,對話:@ 「飼料」 andParams:PARAMS andDelegate:委託,「HTTPS ://graph.facebook.com/me?fields = id,email,first_name & access_token =「,et.al. 3.1示例項目中的一些搜索使得它看起來像所有這些都被替換了 - 我想這不僅僅是名稱更改。

我還沒有找到這個Upgrading from 3.0 to 3.1的2.x至3.x版本 - 如果我忽略了這一點,請告知。

當以前試圖升級到3.0時,當嘗試使用折舊的API時,我遇到了重大的破壞(重複的SBJson頭,不解析的FB頭),一旦編譯,handleOpenURL似乎破碎,它會重新切換第二次到FB,然後崩潰。而且我發現了一些貼子,說明禁用3.x的ARC可能存在問題(我們不能使用它,因爲我們有C++)。

我還沒有着手2.x到3.1。也許這會更順利,但我很樂意從那些在第二場比賽之前走到我面前的人那裏獲得一些見解 - 非常感謝。

回答

9

我剛剛爲我的應用做過升級。我之所以這樣做是因爲他們最終會棄用舊的sdk,因此對於iOS 6而言流暢流暢,並且未來對Facebook的支持。最大的變化是登錄流程和開放圖形調用。該對話框要求在您的牆上張貼仍然揹負已棄用的標題。對於這些方法,你有興趣,他們將被替換如下:

[ad.facebook認證:燙髮]

FBSession *session = [[FBSession alloc] initWithAppID:appId 
           permissions:permissionsArray 
          urlSchemeSuffix:urlSuffix 
         tokenCacheStrategy:nil]; 

[FBSession setActiveSession:session]; 
if(allowLoginUI == YES) 
{ 
    [session openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent completionHandler:handler]; 
} 
else if(session.state == FBSessionStateCreatedTokenLoaded) 
{ 
    [session openWithCompletionHandler:^(FBSession *_session, FBSessionState status, NSError *error) { 
     [self _sessionStateChanged:_session state:status error:error];    
    }]; 
} 
[session release]; 

看到額外的實施說明,登錄
https://developers.facebook.com/docs/howtos/share-appid-across-multiple-apps-ios-sdk/
https://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/

shouldExtendAccessToken,extendAccessTokenIfNeeded, - 這些現在消失了,facebook SDK實現支持緩存並在需要時擴展令牌。如果你看到我的第一個代碼snippit,如果loginUI不應該顯示,但會話狀態是在FBSessionStateCreatedTokenLoaded中,你仍然想打開會話。當你的會話的狀態FBSessionStateCreatedTokenLoaded這意味着:

一個指示緩存令牌是 加載兩個初始會話狀態的;當會話處於此狀態下,調用open *將導致在打開的會話 ,不UX或APP切換

結賬SessionLoginSample以獲得更多信息。

isSessionValid - 這是現在

FBSession.activeSession.isOpen 

對話框:@ 「飼料」 andParams:PARAMS andDelegate:委託 - 這仍然是相同的,但是你必須之前創建這樣Facebook的實例使用它:

Facebook *facebook = [[Facebook alloc] initWithAppId:FBSession.activeSession.appID andDelegate:nil]; 
facebook.accessToken = FBSession.activeSession.accessToken; 
facebook.expirationDate = FBSession.activeSession.expirationDate; 
//... normal code to setup a feed post 
[facebook dialog:@"feed" andParams:params andDelegate:self]; 
[facebook release]; 

看到https://developers.facebook.com/docs/howtos/feed-dialog-using-ios-sdk/更多信息

「https://graph.facebook.com/me?fields=id,email,first_name & access_token =」, - 圖形調用現在更簡單了。您也可以很容易地將它們一起批處理。

//[facebook requestWithGraphPath:@"me" andDelegate:self]; would become 
[FBRequestConnection startForMeWithCompletionHandler:^ 
    (FBRequestConnection *connection, id result, NSError *error) {}]; 

//[facebook requestWithGraphPath:@"me/albums" andParams:params andHttpMethod:@"POST" andDelegate:self]; would become 
    [FBRequestConnection startWithGraphPath:@"me/albums" 
          parameters:params 
          HTTPMethod:@"POST" 
         completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {}]; 

https://developers.facebook.com/docs/howtos/batch-requests-ios-sdk/更多信息

+0

感謝周到和詳細的迴應 - 非常有幫助。當我有機會驗證這些時,我會確保將其標記爲正確的迴應。再次感謝。 – leontx

+0

只是好奇,因爲我必須做這個確切的工作,我想知道你花了多長時間,所以我可以給一個體面的估計。謝謝 –

+0

@JonathanDixon可能不會很長時間2-3小時。新的SDK仍然包含了所有舊的SDK,因此您可以以塊的形式攻擊此項目。只需更換您需要的東西,然後使用舊系統即可。然後慢慢升級。 – odyth