關于iOS的社會化分享方案總結
一、系統(tǒng)原生 UIActivityViewController
優(yōu)缺點
- 優(yōu)點:使用簡單、不用注冊繁雜的分享平臺賬號、不用導入臃腫的SDK包
- 缺點:UI可定制性差,只能使用系統(tǒng)提供的固定樣式,長相如下。分享的類型受限,只能分享text、url、image。
UIActivityViewController分享界面
使用:
- NSString *textToShare = @"要分享的文本內(nèi)容";
- UIImage *imageToShare = [UIImage imageNamed:@"iosshare.jpg"];
- NSURL *urlToShare = [NSURL URLWithString:@"http://www.baidu.com"];
- NSArray *activityItems = @[textToShare, imageToShare, urlToShare];
- UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
- [self presentViewController:activityVC animated:YES completion:nil];
activityItems是要分享的內(nèi)容,包括文字、圖片、網(wǎng)址。但是要注意的是,不是所有平臺都支持這三種內(nèi)容的分享,例如微信,不能同時分享圖片和網(wǎng)址,文字不能直接往外分享,下圖是幾個平臺分享概略
各平臺分享概略
當彈出視圖框的時候,我們發(fā)現(xiàn)上邊很多圖標是我們用不到,我們可以將用不到的圖標去掉,只要設置以下屬性:
- activityVC.excludedActivityTypes = @[UIActivityTypePostToFacebook,UIActivityTypeAirDrop];
設置回調(diào)block,可以在分享之后成功或失敗后做事情,
- UIActivityViewControllerCompletionWithItemsHandler myBlock = ^(UIActivityType __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError) {
- if (completed){
- NSLog(@"completed");
- }
- };
- activityVC.completionWithItemsHandler = myBlock;
二、系統(tǒng)原生Social Framework
優(yōu)缺點
- 優(yōu)點:使用簡單、不用注冊繁雜的分享平臺賬號、不用導入臃腫的SDK包。UI可以自己繪制,滿足了很多個性化的需求。
- 缺點:分享界面的UI需要開發(fā)者自己繪制,增加了工作量。分享的類型受限,只能分享text、url、image。
使用
導入Social.framework
- #import
- //創(chuàng)建分享的控制器
- SLComposeViewController *composeVc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo];
- if (composeVc == nil){
- NSLog(@"未安裝軟件");
- return;
- }
- if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]) {
- NSLog(@"軟件未配置登錄信息");
- return;
- }
- //添加分享的文字、圖片、鏈接
- [composeVc setInitialText:@"要分享的文本內(nèi)容"];
- [composeVc addImage:[UIImage imageNamed:@"choice_highlight"]];
- [composeVc addURL:[NSURL URLWithString:@"http://www.baidu.com"]];
- //彈出分享控制器
- [self presentViewController:composeVc animated:YES completion:nil];
- //監(jiān)聽用戶點擊了取消還是發(fā)送
- composeVc.completionHandler = ^(SLComposeViewControllerResult result){
- if (result == SLComposeViewControllerResultCancelled) {
- NSLog(@"點擊了取消");
- } else {
- NSLog(@"點擊了發(fā)送");
- }
- };
系統(tǒng)只提供了下面幾種分享平臺:
- SLServiceTypeTwitter;
- SLServiceTypeFacebook;
- SLServiceTypeSinaWeibo;
- SLServiceTypeTencentWeibo;
- SLServiceTypeLinkedIn;
實際可以根據(jù)id來分享到更多平臺,如微信:
- NSString *socialType = @"com.tencent.xin.sharetimeline";
- SLComposeViewController *composeVC = [SLComposeViewControllercomposeViewControllerForServiceType:socialType];
可以這么使用的原因是:iOS8之后系統(tǒng)推出的Share Extension,不是系統(tǒng)實現(xiàn)了微信分享,而是微信App的Share Extension提供了分享入口。所以這個不是私有API,可以放心使用,想獲取手機中裝的App的所有Share Extension的方法。只需調(diào)用下面一句代碼。
- SLComposeViewController *composeVc = [SLComposeViewControllercomposeViewControllerForServiceType:SLServiceTypeSinaWeibo];
看看控制臺輸出,手機內(nèi)所有可用的Share Extension的bundle Id 都出來了。
三、友盟等第三方分享平臺
優(yōu)缺點
- 優(yōu)點:開發(fā)者可以按照第三方文檔自己定制分享界面UI、功能。分享的類型可以自由選擇,除了text、url、image。還有其他格式多媒體(聲音、視頻、文件等)可供選擇。
- 缺點:需要去友盟以及各個分享平臺注冊繁雜的賬號、導入臃腫的SDK包。配置跳轉(zhuǎn)白名單。
使用
友盟分享使用文檔及SDK下載(http://dev.umeng.com/social/ios/operation)
四、OpenShare
優(yōu)缺點
- 優(yōu)點:開發(fā)者可以自己定制分享界面UI、功能。分享的類型可以自由選擇,除了text、url、image。還有其他格式多媒體(聲音、視頻、文件等)可供選擇。
- 缺點:需要配置跳轉(zhuǎn)白名單。
使用
- 實現(xiàn)原理介紹
http://www.gfzj.us/series/openshare/
- github代碼和demo地址
https://github.com/100apps/openshare
總結
這四種分享方案,各有優(yōu)缺點,沒有***的分享方案,只有最適合你App需求的方案。
如果你的App界面需要定制化,分享類型需要支持多媒體(聲音、視頻、文件等),分享平臺只限于微信、QQ、微博、人人、支付寶,使用openshare。如果需要支持的平臺很多,使用友盟分享。
如果分享的類型只限于text、image、url,對界面要求不高,系統(tǒng)原生的UIActivityViewController就可以,使用UIActivityViewController。如果界面需要定制化,使用Social Framework。
方案 | UI | 分享類型 | 分享平臺 |
---|---|---|---|
UIActivityViewController | 要求不高 | text、image、url | 多種平臺 |
Social Framework | 要求自定義 | text、image、url | 多種平臺 |
友盟等第三方分享平臺 | 要求自定義 | 支持多媒體(聲音、視頻、文件等) | 多種平臺 |
OpenShare | 要求自定義 | 支持多媒體(聲音、視頻、文件等 | 微信/QQ/微博/人人/支付寶 |
除了***種方案UIActivityViewController不需要自己繪制界面以外,其他方案均要自己繪制分享彈出菜單,針對以上問題,我寫了一個界面和功能高度可定制化的輪子IFMShare(Swift版)供大家使用。
推薦
IFMShare(Swift版)使用簡單、優(yōu)雅,界面和功能高度可定制化。支持單行滾動、雙行滾動、多行、九宮格、頭視圖、尾視圖等多種樣式,分享功能可以一個平臺名直接調(diào)用Share Extension,也可以使用各平臺SDK或者OpenShare自定義分享功能。歡迎前去issue、pull request、star,代碼示例如下:
- IFMShareView *shareView = [[IFMShareView alloc] initWithItems:@[IFMPlatformNameSms,IFMPlatformNameEmail,IFMPlatformNameQQ,IFMPlatformNameWechat] itemSize:CGSizeMake(80,100) DisplayLine:YES];
- //設置分享內(nèi)容
- [shareView addText:@"分享測試"];
- [shareView addURL:[NSURL URLWithString:@"http://www.baidu.com"]];
- [shareView addImage:image];
- [shareView showFromControlle:self];
部分自定義界面展示
圖片展示
GIF展示

動圖展示
參考文章:
《使用系統(tǒng)自帶的UIActivityViewController和UIActivity進行內(nèi)容分享》
新手指南:使用 Social Framework 以及 UIActivityViewController
iOS通過UIActivityViewController實現(xiàn)原生分享功能
UIActivityViewController 和 SLComposeViewController
程序內(nèi)分享到微信