事前的準備:
1. 建立2個場景Scene,一個為登入頁面,一個為登入後主頁面
- 登入頁面:其中有個登入按鈕
- 登入後主頁面:1個文字標籤Label、1個PO文按鈕、1個刪除PO文按鈕和1個登出按鈕
2. 建立繼承自UIViewController的LoginController,並設定在登入場景中
3. 建立繼承自UIViewController的MainController,並設定在登入後的主場景中
4. 設定登入場景轉場至主場景的轉場Segue,並命名為go_main
requestForDeleteObject:可以以行除Facebook的物件,在此以PO文物件為例,現在開始建立刪除PO文的相關程式!
第1步:登入並取得刪除PO文權限
- 在"登入"按鈕上建立對應的action - loginTocuh
- 使用FBSession的+openActiveSessionWithPublishPermissions:...開啟Session,並帶入以陣列方式帶入刪除物件所需的權限@[@"publish_actions"],其與PO文的權限也相同,其中的defaultAudience:參數給予FBSessionDefaultAudienceEveryone表示PO的文所有人都看的到。在成功登入後即透過"go_main"轉場segue,轉場至主頁面
- (IBAction)loginTouch:(id)sender {
//透過+[openActiveSession allowLoginUI:YES...]進行Facebook登入,
//這次使用openActiveSessionWithPublishPermissions取得可以刪除物件的請求,
//當然,刪除物件的權限與PO文的權限相同,以陣列的方式@[@"publish_actions"]帶入,
//defaultAudience參數代入FBSessionDefaultAudienceEveryone表示PO文的資訊所有人皆可看的到
[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 - postTouch,同時加上objectID屬性,以將PO文後的物件ID - id保存下來,後續才能透過物件ID進行刪除的動作
- 透過FBRequest的requestForPostStatusUpdate:建立PO文的請求,接著建立FBRequestConnection物件,透過addReuqest:加入reuqest至FBRequestConnection中,在透過FBRequestConnection物件的start方法將reuqest實際送出,以實際執行PO文的動作,注意,在成功PO文後,會將PO文的物件ID保存在objectID屬性中。
- (IBAction)postTouch:(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版面查看訊息。";
//成功PO文後,將物件id表存在objectID屬性中
self.objectID = [result objectForKey:@"id"];
}
else
{
//message = @"PO文失敗!";
message = [error description];
}
//透過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文
- 在"刪除PO文"按鈕上建立對應的action - deleteTouch
- (IBAction)deleteTouch:(id)sender {
//透過FBRequest的requestForDeleteObject:取得刪除物件的FBReuqest請求物件,
//其中帶入要objectID屬性,即是PO先前PO文後文後的物件ID
FBRequest *request = [FBRequest requestForDeleteObject:self.objectID];
//透過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文失敗!";
message = [error description];
}
//透過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];
}
第4步:執行
- 接下登入,此時會出現取得權限的畫面,點選"PO文"後至您的Facebook查看此文,而後在點選"刪除PO文"在回到Facebook查看此文已不存在,已被刪除
別忘了補上登出程式
- 為"登出"按鈕加上action - logoutTouch
-
透過closeAndClearTokenInformation關閉session以登出Facebook,並透過dismissViewControllerAnimated:方法關閉目前所在的場景
- (IBAction)logoutTouch:(id)sender {
//透過closeAndClearTokenInformation關閉session以登出Facebook
[FBSession.activeSession closeAndClearTokenInformation];
//關閉此登出畫面
[self dismissViewControllerAnimated:YES
completion:nil];
}
檔案連結:myiosapp_requestForDeleteObject.zip (此Facebook AppID已刪除,僅提供程式參考)
還有什麼物件可以刪除?