一、系統原生 UIActivityViewController
優缺點
- 優點:使用簡單、不用註冊繁雜的分享平臺賬號、不用匯入臃腫的SDK包
- 缺點:UI可定製性差,只能使用系統提供的固定樣式,長相如下。分享的型別受限,只能分享text、url、image。
使用:
1 2 3 4 5 6 7 8 9 |
NSString *textToShare = @"要分享的文字內容"; 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
是要分享的內容,包括文字、圖片、網址。但是要注意的是,不是所有平臺都支援這三種內容的分享,例如微信,不能同時分享圖片和網址,文字不能直接往外分享,下圖是幾個平臺分享概略
當彈出檢視框的時候,我們發現上邊很多圖示是我們用不到,我們可以將用不到的圖示去掉,只要設定以下屬性:
1 2 |
activityVC.excludedActivityTypes = @[UIActivityTypePostToFacebook,UIActivityTypeAirDrop]; |
設定回撥block,可以在分享之後成功或失敗後做事情,
1 2 3 4 5 6 7 8 9 |
UIActivityViewControllerCompletionWithItemsHandler myBlock = ^(UIActivityType __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError) { if (completed){ NSLog(@"completed"); } }; activityVC.completionWithItemsHandler = myBlock; |
二、系統原生Social Framework
優缺點
- 優點:使用簡單、不用註冊繁雜的分享平臺賬號、不用匯入臃腫的SDK包。UI可以自己繪製,滿足了很多個性化的需求。
- 缺點:分享介面的UI需要開發者自己繪製,增加了工作量。分享的型別受限,只能分享text、url、image。
使用
匯入Social.framework
1 |
#import |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//建立分享的控制器 SLComposeViewController *composeVc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo]; if (composeVc == nil){ NSLog(@"未安裝軟體"); return; } if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]) { NSLog(@"軟體未配置登入資訊"); return; } //新增分享的文字、圖片、連結 [composeVc setInitialText:@"要分享的文字內容"]; [composeVc addImage:[UIImage imageNamed:@"choice_highlight"]]; [composeVc addURL:[NSURL URLWithString:@"http://www.baidu.com"]]; //彈出分享控制器 [self presentViewController:composeVc animated:YES completion:nil]; //監聽使用者點選了取消還是傳送 composeVc.completionHandler = ^(SLComposeViewControllerResult result){ if (result == SLComposeViewControllerResultCancelled) { NSLog(@"點選了取消"); } else { NSLog(@"點選了傳送"); } }; |
系統只提供了下面幾種分享平臺:
1 2 3 4 5 6 |
SLServiceTypeTwitter; SLServiceTypeFacebook; SLServiceTypeSinaWeibo; SLServiceTypeTencentWeibo; SLServiceTypeLinkedIn; |
實際可以根據id來分享到更多平臺,如微信:
1 2 3 |
NSString *socialType = @"com.tencent.xin.sharetimeline"; SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:socialType]; |
可以這麼使用的原因是:iOS8之後系統推出的Share Extension,不是系統實現了微信分享,而是微信App的Share Extension提供了分享入口。所以這個不是私有API,可以放心使用,想獲取手機中裝的App的所有Share Extension的方法。只需呼叫下面一句程式碼。。
1 2 |
SLComposeViewController *composeVc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo]; |
看看控制檯輸出,手機內所有可用的Share Extension的bundle Id 都出來了。
三、友盟等第三方分享平臺
優缺點
- 優點:開發者可以按照第三方文件自己定製分享介面UI、功能。分享的型別可以自由選擇,除了text、url、image。還有其他格式多媒體(聲音、視訊、檔案等)可供選擇。
- 缺點:需要去友盟以及各個分享平臺註冊繁雜的賬號、匯入臃腫的SDK包。配置跳轉白名單。
使用
四、OpenShare
優缺點
- 優點:開發者可以自己定製分享介面UI、功能。分享的型別可以自由選擇,除了text、url、image。還有其他格式多媒體(聲音、視訊、檔案等)可供選擇。
- 缺點:需要配置跳轉白名單。
使用
總結
這四種分享方案,各有優缺點,沒有最好的分享方案,只有最適合你App需求的方案。
如果你的App介面需要定製化,分享型別需要支援多媒體(聲音、視訊、檔案等),分享平臺只限於微信、QQ、微博、人人、支付寶,使用openshare。如果需要支援的平臺很多,使用友盟分享。
如果分享的型別只限於text、image、url,對介面要求不高,系統原生的UIActivityViewController就可以,使用UIActivityViewController。如果介面需要定製化,使用Social Framework。
方案 | UI | 分享型別 | 分享平臺 |
---|---|---|---|
UIActivityViewController | 要求不高 | text、image、url | 多種平臺 |
Social Framework | 要求自定義 | text、image、url | 多種平臺 |
友盟等第三方分享平臺 | 要求自定義 | 支援多媒體(聲音、視訊、檔案等) | 多種平臺 |
OpenShare | 要求自定義 | 支援多媒體(聲音、視訊、檔案等 | 微信/QQ/微博/人人/支付寶 |
除了第一種方案UIActivityViewController
不需要自己繪製介面以外,其他方案均要自己繪製分享彈出選單,針對以上問題,我寫了一個介面和功能高度可定製化的輪子IFMShare(Swift版)供大家使用。
推薦
IFMShare(Swift版)使用簡單、優雅,介面和功能高度可定製化。支援單行滾動、雙行滾動、多行、九宮格、頭檢視、尾檢視等多種樣式,分享功能可以一個平臺名直接呼叫Share Extension,也可以使用各平臺SDK或者OpenShare自定義分享功能。歡迎前去issue、pull request、star
,程式碼示例如下:
1 2 3 4 5 6 7 8 9 |
IFMShareView *shareView = [[IFMShareView alloc] initWithItems:@[IFMPlatformNameSms,IFMPlatformNameEmail,IFMPlatformNameQQ,IFMPlatformNameWechat] itemSize:CGSizeMake(80,100) DisplayLine:YES]; //設定分享內容 [shareView addText:@"分享測試"]; [shareView addURL:[NSURL URLWithString:@"http://www.baidu.com"]]; [shareView addImage:image]; [shareView showFromControlle:self]; |
部分自定義介面展示
GIF展示
下一篇內容:UIActivityViewController自定義Activity、OpenShare配置跳轉白名單
參考文章:
《使用系統自帶的UIActivityViewController和UIActivity進行內容分享》
新手指南:使用 Social Framework 以及 UIActivityViewController
iOS通過UIActivityViewController實現原生分享功能
UIActivityViewController 和 SLComposeViewController
程式內分享到微信