【教學】Facebook SDK 三部曲(下):點一下,分享到Facebook(這是懶人包...)
這篇跟大家分享幾種比較常見的,推出Facebook分享介面的方法,
我們有:
1. 內建的分享介面。
我們用的是:
a. UIActivityViewController,iOS 6.0 up。
b. social.framework 的 SLComposeViewController,iOS 6.0 up。
c. Facebook SDK 的 FBDialogs。
2. 呼叫Facebook App的分享介面。
我們用的是:Facebook SDK 的 FBDialogs。
因為這次分享的方法,都是利用使用者設定在手機裡的Facebook帳號,所以只需要準備:
1. Facebook SDK 3.0 up。
2. social.framework,iOS framework有。
3. 實機,iOS6.0 up。
因為使用方法都挺簡便的,我們直接來寫Code吧!
a. UIActivityViewController。
Note:
1. ActivityItem,放的是要分享的文字、連結、圖片。
2. applicationActivities,放的是自定的UIActivityView。
3. 如果不要有其他icon選項出現,設定在excludedActivityTypes裡,預設的社交服務有Facebook、Twitter、WeiBo,其他選項可以在這裡的Constants找到。
注意!
UIActivityView 在模擬器上,如果沒有設定Facebook帳號,會以AlertView來提醒,
但是實機來測試,如果沒有設定,就不會出現選項,也沒有提醒。
b. SLComposeViewController。
請先#import <Social/Social.h>。
Note:
1. 支援的服務在這裡。
2. social.framework也有提供像FBRequestConnection的Class:SLRequest。
不過很不好用 : p,很多狀況不能處理,有空可以試一試。
c. FBDialogs
請先#import <FacebookSDK/FacebookSDK.h>。
請先#import <FacebookSDK/FacebookSDK.h>。
Ya!終於結束了!....
Using the Share Dialog
FBDialogs
UIActivityViewController
Social framework
我們有:
1. 內建的分享介面。
我們用的是:
a. UIActivityViewController,iOS 6.0 up。
b. social.framework 的 SLComposeViewController,iOS 6.0 up。
c. Facebook SDK 的 FBDialogs。
2. 呼叫Facebook App的分享介面。
我們用的是:Facebook SDK 的 FBDialogs。
因為這次分享的方法,都是利用使用者設定在手機裡的Facebook帳號,所以只需要準備:
1. Facebook SDK 3.0 up。
2. social.framework,iOS framework有。
3. 實機,iOS6.0 up。
因為使用方法都挺簡便的,我們直接來寫Code吧!
內建的分享介面
a. UIActivityViewController。
- (IBAction)pushCustomActivityView:(id)sender { NSString *words = @"我很帥!!!"; UIImage *sharePic = [UIImage imageNamed:@"google.jpg"]; NSURL *shareURL = [NSURL URLWithString:@"http://https://www.google.com.tw/search?q=%E6%88%91%E5%BE%88%E5%B8%A5&ie=utf-8&oe=utf-8&rls=org.mozilla:zh-TW:official&client=firefox-a&channel=fflb&gws_rd=cr"]; NSArray *item = @[words, sharePic, shareURL]; UIActivityViewController *ac = [[UIActivityViewController alloc] initWithActivityItems:item applicationActivities:nil]; ac.excludedActivityTypes = @[UIActivityTypeCopyToPasteboard, UIActivityTypeMail, UIActivityTypeMessage, UIActivityTypeSaveToCameraRoll, UIActivityTypePrint]; [ac setCompletionHandler:^(NSString *activityType, BOOL completed) { // while complete, do this NSLog(@"Is complete ? %@, activityType : %@", completed?@"YES":@"NO", activityType); }]; [self presentViewController:ac animated:YES completion:nil]; }
Note:
1. ActivityItem,放的是要分享的文字、連結、圖片。
2. applicationActivities,放的是自定的UIActivityView。
3. 如果不要有其他icon選項出現,設定在excludedActivityTypes裡,預設的社交服務有Facebook、Twitter、WeiBo,其他選項可以在這裡的Constants找到。
注意!
UIActivityView 在模擬器上,如果沒有設定Facebook帳號,會以AlertView來提醒,
但是實機來測試,如果沒有設定,就不會出現選項,也沒有提醒。
(Twitter沒設帳號)
(只剩Facebook)
(設定完成)
(Twitter出現了!)
b. SLComposeViewController。
請先#import <Social/Social.h>。
- (IBAction)socialAction:(id)sender { NSString *shareWords = @"我很帥!"; UIImage *shareImage = [UIImage imageNamed:@"google.jpg"]; SLComposeViewController *shareView = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook]; [shareView setInitialText:shareWords]; [shareView addImage:shareImage]; [shareView setCompletionHandler:^(SLComposeViewControllerResult result) { // while complete, do this switch (result) { case SLComposeViewControllerResultCancelled: NSLog(@"User Cancelled."); break; case SLComposeViewControllerResultDone: NSLog(@"Share Done."); break; } }]; [self presentViewController:shareView animated:YES completion:nil]; }
Note:
1. 支援的服務在這裡。
2. social.framework也有提供像FBRequestConnection的Class:SLRequest。
不過很不好用 : p,很多狀況不能處理,有空可以試一試。
- (IBAction)sendSLRequest:(id)sender { NSURL *requestURL = [NSURL URLWithString:@"https://graph.facebook.com/me/feed"]; NSString *shareWords = @"我很帥!!!"; NSMutableDictionary *para = [[NSMutableDictionary alloc] init]; [para setValue:shareWords forKey:@"message"]; SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:requestURL parameters:para]; [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { // while complete, do this NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; NSLog(@"Response : %@", [urlResponse allHeaderFields]); NSLog(@"Result : %@", result); NSLog(@"Error : %@", error?error:@"OK"); }]; }
(碰到狀況就頭大了)
c. FBDialogs
請先#import <FacebookSDK/FacebookSDK.h>。
- (IBAction)presentByFBSDK:(id)sender { NSString *shareWords = @"我很帥!"; UIImage *shareImage = [UIImage imageNamed:@"google.jpg"]; NSURL *shareURL = [NSURL URLWithString:@"http://https://www.google.com.tw/search?q=%E6%88%91%E5%BE%88%E5%B8%A5&ie=utf-8&oe=utf-8&rls=org.mozilla:zh-TW:official&client=firefox-a&channel=fflb&gws_rd=cr"]; [FBDialogs presentOSIntegratedShareDialogModallyFrom:self initialText:shareWords image:shareImage url:shareURL handler:^(FBOSIntegratedShareDialogResult result, NSError *error) { // while complete, do this switch (result) { case FBOSIntegratedShareDialogResultSucceeded: NSLog(@"Share Success."); break; case FBOSIntegratedShareDialogResultCancelled: NSLog(@"Share Cancelled."); break; case FBOSIntegratedShareDialogResultError: NSLog(@"Share Error."); break; } NSLog(@"Share error : %@", error?error:@"OK"); }]; }
呼叫Facebook App的分享介面
請先#import <FacebookSDK/FacebookSDK.h>。
- (IBAction)presentByFBApp:(id)sender { NSString *shareWords = @"我很帥!"; NSURL *shareURL = [NSURL URLWithString:@"http://https://www.google.com.tw/search?q=%E6%88%91%E5%BE%88%E5%B8%A5&ie=utf-8&oe=utf-8&rls=org.mozilla:zh-TW:official&client=firefox-a&channel=fflb&gws_rd=cr"]; [FBDialogs presentShareDialogWithLink:shareURL name:shareWords handler:^(FBAppCall *call, NSDictionary *results, NSError *error) { // while complete, do this NSLog(@"Share Result : %@", results); NSLog(@"Share error : %@", error?error:@"OK"); }]; }
(這一定又有什麼誤會了...)
參考文件
Using the Share Dialog
FBDialogs
UIActivityViewController
Social framework
你寫得真的很不錯,謝謝!!!!
回覆刪除感謝你的支持!!!
回覆刪除