1. 程式人生 > >Facebook SDK(iOS)初學講解

Facebook SDK(iOS)初學講解

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好多概念,特別是網路這方面的。要想全面把握需要很多功夫,以後需要什麼功能在查閱吧!