事前的準備:
1. 建立2個場景Scene,一個為登入頁面,一個為登入後主頁面
- 登入頁面:其中有個登入按鈕
- 登入後主頁面:1個文字標籤Label、1個UITextView、1個讀取個人資料按鈕和1個登出按鈕
2. 建立繼承自UIViewController的LoginController,並設定在登入場景中
3. 建立繼承自UIViewController的MainController,並設定在登入後的主場景中
4. 設定登入場景轉場至主場景的轉場Segue,並命名為go_main
現在開始建立讀取個人資料的相關程式!
第1步:登入
- 在"登入"按鈕上建立對應的action - loginTocuh
- 使用FBSession的+openActiveSessionWithReadPermissions:...開啟Session。讀取個人資料並不需要設定什麼權限,登入時需要同意的被使用的基本資料即可成功取得讀取個人資料的權限,在成功登入後即透過"go_main"轉場segue,轉場至主頁面
- (IBAction)loginTouch:(id)sender {
//透過+[openActiveSession allowLoginUI:YES...]進行Facebook登入,
//這次使用openActiveSessionWithReadPermissions取得可以讀取資料的請求物件
[FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:YES
completionHandler:^(FBSession *session
, FBSessionState status
, NSError *error) {
if(error != nil){
NSLog(@"error:%@", [error description]);
}
//若無error且session的status等於FBSessionStateOpen
//成功登入Facebook開啟連結
if(error == nil && status == FBSessionStateOpen)
{
//則透過轉場識別字"go_main"轉場至MainController
[self performSegueWithIdentifier:@"go_main" sender:self];
}
}];
}
第2步:讀取個人資料
- 為UITextView加上outlet - meData
- 在"讀取個人資料"按鈕上建立對應的action - readMeTouch
- 透過FBRequest的requestForMe建立讀取個人資料的請求,接著建立FBRequestConnection物件,透過addReuqest:加入reuqest至FBRequestConnection中,在透過FBRequestConnection物件的start方法將reuqest實際送出,以實際執行讀取的動作,在讀取後,即可透過回傳result參數取得個人資料,並在取得後組成字串顯示在UITextView - meData上面。
- (IBAction)readMeTouch:(id)sender {
//透過FBRequest的requestForMe取得讀取個人資料的的FBReuqest請求物件。
FBRequest *request = [FBRequest requestForMe];
//透過FBReuqestConnection物件
FBRequestConnection *connection = [[FBRequestConnection alloc] init];
//FBReuqestConnection物件透過addRequest加PO文的FBRequest加入其中
//其中的copletionHandler參數則帶入一個block,
//此block會在FBReuqestConnection將FBRequest送出後執行。
[connection addRequest:request
completionHandler:^(FBRequestConnection *connection
, id result
, NSError *error) {
//無錯誤,讀取資料
if(error == nil)
{
//在block參數中有個result參數會傳回讀取的資料,
//其是一個繼承自NSDictionary類別的物件,
//因此可以轉換為NSDictionary讀取回傳的JSON資料,
//而JSON會轉換為NSDictionary的方式存取。
NSString *dataString = nil;
NSDictionary *data = result;
//將回傳的資料組合成字串
dataString = [[NSString alloc]
initWithFormat:@"id:%@\n姓名:%@\n姓別:%@\n"
, [data objectForKey:@"id"]
, [data objectForKey:@"name"]
, [data objectForKey:@"gender"]
];
//並設定於UITextView - meData中,以顯示資料
[self.meData setText:dataString];
}
else
{
//message = @"PO文失敗!";
NSString *message = nil;
message = [error description];
//透過UIAlertView顯示PO文結果
UIAlertView *view = [[UIAlertView alloc] initWithTitle:nil
message:message
delegate:nil
cancelButtonTitle:@"關閉"
otherButtonTitles: nil];
[view show];
}
}];
//透過FBReuqestConnection的start,
//實際將透過addReuqest方法加入的request送出。
[connection start];
}
第3步:執行
- 按下登入並同意登入後進入主頁畫面,接著按下"讀取個人資料",最後會將讀取的id、姓名與性別顯示出來
別忘了補上登出程式
- 為"登出"按鈕加上action - logoutTouch
-
透過closeAndClearTokenInformation關閉session以登出Facebook,並透過dismissViewControllerAnimated:方法關閉目前所在的場景
- (IBAction)logoutTouch:(id)sender {
//透過closeAndClearTokenInformation關閉session以登出Facebook
[FBSession.activeSession closeAndClearTokenInformation];
//關閉此登出畫面
[self dismissViewControllerAnimated:YES
completion:nil];
}
檔案連結:myiosapp_requestForMe.zip (此Facebook AppID已刪除,僅提供程式參考)