Facebook SDK已經升級到3.1.1了,最近使用了其最新的sdk,完成項目內登陸和發帖兩個準系統。這兩個功能在Facebook SDK裡面已經單獨存在了,使用起來非常簡單。但是使用Facebook SDK的痛點是理解Facebook的構建基礎。這裡除了將基本的操作外,也說點當前我的理解(也是從官網文檔中看的,但理解不一定正確),不過推薦讀者還是多去官網自己看吧,畢竟那裡是根本。
首先Facebook裡面有兩種基本類型,一個是對象,一個串連。對象就是指Facebook的人、圖片、事件等各種獨立單位。串連是指對象間的聯絡。人有喜好這樣一個串連,通過喜好串連,我們能找到人所有喜歡的東西。Facebook將所有的對象通過串連織成社交網路。這是一個Facebook最基本的概念(我覺得)。基於這個社交圖(或稱社交網路),我們可以通過graph path去訪問這個網路內的任何資訊,只要你有存取權限。一個人一般有很多connection,如Feed(即時訊息),likes,friends。我們可以通過"me/feed“去訪問即時訊息,也發行就緒訊息。
//session isn't open, so we have to open it if( ![[FBSession activeSession] isOpen] ) { //open session with write permission if( [FBSession openActiveSessionWithPublishPermissions:[NSArray arrayWithObject:@"publish_actions"] defaultAudience:FBSessionDefaultAudienceEveryone allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { if( error ) { FACEBOOK_LOG(@"facebook---> openActiveSessionWithPublishPermissions() failed!!!!!!!!!!"); } else { FACEBOOK_LOG(@"facebook---> openActiveSessionWithPublishPermissions() successfully."); } //invokde delegate if( m_pDelegate ) { m_pDelegate->sessionStateChange( session, status, error ); } }] ) { FACEBOOK_LOG(@"facebook---> openActiveSessionWithPublishPermissions() return true."); } else { FACEBOOK_LOG(@"facebook---> openActiveSessionWithPublishPermissions() return false."); return false; } }
openActiveSessionWithPublishPermissions()中Facebook的Reference已經講的很詳細了。但其中allowLoginUI很重要,一般就設定為YES,意思是指是否在使用者沒有登陸的時候彈出登陸介面讓使用者先登陸。由於Facebook SDK會保留令牌,所以一旦一登陸了,很難重現登陸介面了,因為Facebook會用程式上一次申請的令牌(令牌不依附於程式,及時程式關閉,令牌還是被存放起來)。雖然Facebook SDK裡面有closeAndClearToken(),但是這個函數並不一定管用(至少我每次關閉程式是都調用了這個函數,但只有幾次提示彈出登陸介面)。
一旦登陸並擁有寫入權限,我們就可以發訊息了。
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: m_pstrLastMessage, @"message", @"http://www.yourweb.com", @"link", @"http://static.ak.fbcdn.net/rsrc.php/v2/y2/r/lpa-16iu9uw.gif", @"picture", @"China star", @"name", @"I love China", @"description", nil]; [FBRequestConnection startWithGraphPath:@"me/feed" parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { if( error ) { FACEBOOK_LOG2( @"facebook---> message( \"%@\" ) posted failed!!!!!!!!!", m_pstrLastMessage ); } else { FACEBOOK_LOG2( @"facebook---> message( \"%@\" ) posted successfully.", m_pstrLastMessage ); } }];
一個feed裡面會有很多屬性(包括必須屬性如字串或者串連,可選屬性圖片,標題等)。這些可以到Facebook SDK官網查閱,在Graph API一類中。一同的connection對應不同的屬性參數,可以去官網查看。
就這兩點我們就可以實現Facebook中最常用的功能了。另外很多很多概念還是去官網查閱吧,連著看了3個小時,我看的都已經頭疼了,想不到一個Facebook好多概念,特別是網路這方面的。要想全面把握需要很多功夫,以後需要什麼功能在查閱吧!