2011年4月12日 星期二

[轉]讓 iOS App 與 Facebook 連接

from:http://www.furnace.idv.tw/

w
Facebook 提供了專屬的 API 可以給多種平台使用,其中當然也包含了手機的 iOS 與 Android 作業系統,在此我們將介紹如何使用 Facebook 的 iOS 專屬 API 與您的 APP 做連結。http://developers.facebook.com/(裡面包含FB各種開發平台的工具)
首先我們先到 github 下載 iOS 專屬的 Facebook API,下載完成後,有兩件重要的事情要做。
1. 將下載下來的 xcode 專案,其中 FBConnect 的資料夾整個複製到我們的專案中,並 import FBConnect.h。
#import "FBConnect/FBConnect.h"
2. 到 Facebook 的應用程式頁去申請一個應用程式 ID (此應用程式 ID 將用做 FB 與 iPhoneAPP 的連結)。
在完成上面的設定後,我們可以開始寫幾段簡單的程式碼來測試連接,首先在要運用API時先加入以下程式片碼片段。
//此處的appid是前面步驟2所申請的應用程式id Facebook* facebook = [[Facebook alloc] initWithAppId:appId]; 接著宣告一個 Array 來存放你程式所需要的 permission 。(詳情見上述網頁,此處只做簡單的示範) NSArray *permissions = [[NSArray arrayWithObjects: @"read_stream", @"offline_access",nil] retain]; 最後使用下述程式碼來連接 Facebook API 所提供的登入頁面。 [facebook authorize:permissions delegate:self]; Done! 補充: 在FB的permission完成後會跳轉回App的頁面, 而這跳轉的動作需要在info.plist中增加一個key值:
圖片中fbXXXXXXXXXXXXXXX的X為您的appid, 完成後即可成功的跳轉了。
=============================================================

繼「讓 iPhoneApp 與 Facebook 連接(一)」我們接著探討授權中更細的部份。 前面提過當 APP 與 FB 做連結的時候,會先傳送一個授權的 Array。
NSArray *permissions = [[NSArray arrayWithObjects: @"read_stream", @"offline_access",nil] retain]; 而這 Array 中的 “read_stream” 和 "offline_access" 其實代表的是當使用者透過 APP 與 FB 做連結的時候, 會從使用者這獲得的資訊,詳細列表可從 Permission 列表中獲取。 在此我們試做一個範例。 NSArray* permissions = [[NSArray arrayWithObjects: @"email",@"user_hometown", @"read_stream",@"friends_birthday", nil] retain]; 授權時即會告知使用者將被存取的資料,如圖:
============================================================
(一)(二)我們的 APP 已經能讓使用者登入自己的帳號並且確認授權給 Facebook 應用程式, 在這些步驟完成後,接下來要示範如何用 APP 向 Facebook 提取使用者所授權的資訊。 首先加入 FBRequestDelegate 然後把接收 request 的 method 叫出

  //發出request成功 - (void)request:(FBRequest *)request didLoad:(id)result { NSLog(@"%@",result); } 
//發出request失敗 - (void)request:(FBRequest *)request didFailWithError:(NSError *)error { NSLog(@"Request error!"); } 此處須注意的是,當 request 發出成功時,接收到的 result 可能會因為發出不同的 request 不同而有不同的資料型態。 在發出 request 的部份,Facebook 提供了一套完整的 API 來抓取使用者的各項資訊與連結,詳情可以參考 Graph API ,本範例以發出提取使用者自己資料的request為例: [facebook requestWithGraphPath:@"me" andDelegate:self]; 這時接收到的 result 會是包含使用者姓名、生日、E-mail 等等的 NSDictionary 型態資料,所以若我們想單獨抓取使用者生日的資訊,我們可以改寫 request:didLoad 為: if([result isKindOfClass:[NSDictionary class]])  NSLog(@"User Birthday: %@",[result objectForKey:@"birthday"]); }

沒有留言:

張貼留言