事前的準備:
1. 建立2個場景Scene,一個為登入頁面,一個為登入後主頁面
- 登入頁面:其中有個登入按鈕
- 登入後主頁面:1個文字標籤Label、1個PO文按鈕和1個登出按鈕
2. 建立繼承自UIViewController的LoginController,並設定在登入場景中
3. 建立繼承自UIViewController的MainController,並設定在登入後的主場景中
4. 設定登入場景轉場至主場景的轉場Segue,並命名為go_main
現在開始建立PO文的相關程式!
第1步:登入並取得PO文權限
- 在"登入"按鈕上建立對應的action - loginTocuh
- 使用FBSession的+openActiveSessionWithPublishPermissions:...開啟Session,並帶入以陣列方式帶入PO文方需權限@[@"publish_actions"],其中的defaultAudience:參數給予FBSessionDefaultAudienceEveryone表示所有人都看的到。在成功登入後即透過"go_main"轉場segue,轉場至主頁面
- (IBAction)loginTouch:(id)sender {
//透過+[openActiveSession allowLoginUI:YES...]進行Facebook登入,
//這次使用openActiveSessionWithPublishPermissions取得可以PO文的連結,
//當然,PO文的權限以陣列的方式@[@"publish_actions"]帶入
//defaultAudience參數代入FBSessionDefaultAudienceEveryone表示所有人皆可看的到
[FBSession openActiveSessionWithPublishPermissions:@[@"publish_actions"]
defaultAudience:FBSessionDefaultAudienceEveryone
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步:PO文
- 在"PO文"按鈕上建立對應的action - post
- 透過FBRequest的requestForPostStatusUpdate:建立PO文的請求,接著建立FBRequestConnection物件,透過addReuqest:加入reuqest至FBRequestConnection中,在透過FBRequestConnection物件的start方法將reuqest實際送出,以實際執行PO文的動作。
- (IBAction)post:(id)sender {
//透過FBRequest的requestForPostStatusUpdate:若得PO文的FBReuqest請求物件,
//其中帶入要PO文的訊息"來自於iOS程式的訊息。"
FBRequest *request = [FBRequest requestForPostStatusUpdate:@"來自於iOS程式的訊息。"];
//透過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) {
NSString *message = nil;
//若error不為nil表示執行成功,
//則message帶入PO文成功字樣,
//若不成功則帶入PO文失敗字樣。
if(error == nil)
{
message = @"PO文成功,請至您的Facebook版面查看訊息。";
}
else
{
message = @"PO文失敗!";
}
//透過UIAlertView顯示PO文結果
UIAlertView *view = [[UIAlertView alloc] initWithTitle:nil
message:message
delegate:nil
cancelButtonTitle:@"關閉"
otherButtonTitles: nil];
[view show];
}];
//透過FBReuqestConnection的start,
//實際將透過addReuqest方法加入的request送出,
//以執行request中的PO文動作。
[connection start];
}
第3步:執行
- 接下登入,此時會出現取得PO文權限的畫面,
別忘了補上登出程式
- 為"登出"按鈕加上action - logoutTouch
-
透過closeAndClearTokenInformation關閉session以登出Facebook,並透過dismissViewControllerAnimated:方法關閉目前所在的場景
- (IBAction)logoutTouch:(id)sender {
//透過closeAndClearTokenInformation關閉session以登出Facebook
[FBSession.activeSession closeAndClearTokenInformation];
//關閉此登出畫面
[self dismissViewControllerAnimated:YES
completion:nil];
}
檔案連結:myiosapp_requestForPostStatusUpdate.zip (此Facebook AppID已刪除,僅提供程式參考)
還有什麼要注意的?
- PO文只有我們已看的到?!
- 因為您的Facebook App已啟用沙盒模式,只限開發人員看的到,因此要把此沙盒模式關閉即可,如下畫面:
- 不是使用FBSessionDefaultAudienceEveryonePO公開的資訊嗎? 怎麼PO出來的文只限我朋友看的到?
- 這是因為您的頁面預設的權限小於發佈的權限,因此會降至您頁面的權限進行PO文,而權限順序如下:
- 公開(FBSessionDefaultAudienceEveryone) ->
- 朋友(FBSessionDefaultAudienceFriends) ->
- 只限本人(FBSessionDefaultAudienceOnlyMe)