我是FBRequest,
透過我你可以決定要向Facebook提出各種操作Facebook的請求,接著你將我交給FBRequestConnection,麻煩FBRequestConnection執行請求就可以了。
|
我是FBRequestConnection,
不用麻煩FBRequest了,
我直接提供startFor...系統的方式, 讓您一次完成建立與執行請求的動作, 快速又省事。 |
先前我們完成了:[iOS] FBRequest刪除 - requestForDeleteObject:
現在,我們透過FBRequestConnection:
1. + startForPostStatusUpdate:completionHandler: 與
2. + startForDeleteObject:completionHandler:
完成PO文與刪文的操作。
事前的準備:
1. 建立2個場景Scene,一個為登入頁面,一個為登入後主頁面
- 登入頁面:其中有個登入按鈕
- 登入後主頁面:1個文字標籤Label、1個PO文按鈕、1個刪除PO文按鈕和1個登出按鈕
2. 建立繼承自UIViewController的LoginController,並設定在登入場景中
3. 建立繼承自UIViewController的MainController,並設定在登入後的主場景中
4. 設定登入場景轉場至主場景的轉場Segue,並命名為go_main
第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進行刪除的動作
- 透接透過FBRequestConnection的+startForPostStatusUpdate:completionHandler:,直接發生PO文的請求,事實上+startFor...系統的方法,都會自動幫您建立FBRequest請求物件,並執行發送出去。注意,在成功PO文後,會將PO文的物件ID保存在objectID屬性中。
- (IBAction)postTouch:(id)sender {
//FBReuqestConnection類別的startForPostStatusUpdate...方法,
//一次完成建立與發送PO文的請求。
[FBRequestConnection startForPostStatusUpdate:@"來自於iOS程式的訊息。"
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];
}];
}
第3步:刪除PO文
- 在"刪除PO文"按鈕上建立對應的action - deleteTouch
- (IBAction)deleteTouch:(id)sender {
//FBReuqestConnection類別的startForDeleteObject...方法,
//一次完成建立與發送刪除Facebook物件的請求。
[FBRequestConnection startForDeleteObject:self.objectID
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];
}];
}
第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_startForPostStatusUpdate_startForDeleteObject.zip (此Facebook AppID已刪除,僅提供程式參考)
更多的FBReuqestConnection的+startFor...系統方法,請參考:
https://developers.facebook.com/docs/reference/ios/current/class/FBRequestConnection