事前的準備:
1. 建立2個場景Scene,一個為登入頁面,一個為登入後主頁面
- 登入頁面:其中有個登入按鈕
- 登入後主頁面:1個文字標籤Label、1個PO圖按鈕和1個登出按鈕
2. 建立繼承自UIViewController的LoginController,並設定在登入場景中
3. 建立繼承自UIViewController的MainController,並設定在登入後的主場景中
4. 設定登入場景轉場至主場景的轉場Segue,並命名為go_main
5. 加入上傳的圖片small_facebook_sdk.png,下載連結。下載後將圖拉入專案中(在此為myiosapp),以加入上傳圖片。
現在開始建立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 - postTouch
- 透過FBRequest的requestForUploadPhoto:建立PO圖的請求,接著建立FBRequestConnection物件,透過addReuqest:加入reuqest至FBRequestConnection中,在透過FBRequestConnection物件的start方法將reuqest實際送出,以實際執行PO圖的動作。
- (IBAction)postTouch:(id)sender {
//載入圖片
UIImage *image = [UIImage imageNamed:@"small_facebook_sdk.png"];
//透過FBRequest的requestForUploadPhoto:取得PO圖的FBReuqest請求物件,
//其中帶入要PO圖的的圖片image。
FBRequest *request = [FBRequest requestForUploadPhoto:image];
//透過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];
}
第3步:執行
- 接下登入,此時會出現取得PO圖權限的畫面,
別忘了補上登出程式
- 為"登出"按鈕加上action - logoutTouch
-
透過closeAndClearTokenInformation關閉session以登出Facebook,並透過dismissViewControllerAnimated:方法關閉目前所在的場景
- (IBAction)logoutTouch:(id)sender {
//透過closeAndClearTokenInformation關閉session以登出Facebook
[FBSession.activeSession closeAndClearTokenInformation];
//關閉此登出畫面
[self dismissViewControllerAnimated:YES
completion:nil];
}
檔案連結:myiosapp_requestForUploadPhoto.zip (此Facebook AppID已刪除,僅提供程式參考)