iOS之OC使用原生控制元件實現分享到QQ、微信、簡訊、微博等的兩種方法
阿新 • • 發佈:2019-02-03
現在任何一款APP都離不開“分享”,產品設計可能是覺得有分享能更好的推廣自己的產品吧。。。
一種是使用UIActivityViewController, 另外一種是使用Social框架中的SLComposeViewController
一、UIActivityViewController
優缺點:
/**
優點:使用簡單、不用註冊繁雜的分享平臺賬號、不用匯入臃腫的SDK包
缺點:UI可定製性差,只能使用系統提供的固定樣式,長相如下。分享的型別受限,只能分享text、url、image。
*/
這種實現相當簡單,裝置會檢測已安裝的裝置,比如說手機需要安裝 QQ 才能分享到QQ。否則在選擇分享渠道的時候是沒有未安裝的APP渠道的。
直接程式碼:
- (void)shareBtClick { NSString *textToShare = @"哈羅大家好,這是分享測試的內容哦,如已看請忽略!如有任何疑問可聯絡1008611查你話費吧!"; UIImage *imageToShare = [UIImage imageNamed:@"動態(1)@2x.png"]; NSURL *urlToShare = [NSURL URLWithString:@"http://blog.csdn.net/Boyqicheng"]; // 分享的圖片不能為空 NSArray *activityItems = @[textToShare, imageToShare, urlToShare]; UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil]; // 排除(UIActivityTypeAirDrop)AirDrop 共享、(UIActivityTypePostToFacebook)Facebook activityVC.excludedActivityTypes = @[UIActivityTypePostToFacebook, UIActivityTypeAirDrop]; [self presentViewController:activityVC animated:YES completion:nil]; // 通過block接收結果處理 UIActivityViewControllerCompletionWithItemsHandler completionHandler = ^(UIActivityType __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError){ if (completed) { [self showAlertViewWithMsg:@"恭喜你,分享成功!"]; }else{ [self showAlertViewWithMsg:@"很遺憾,分享失敗!"]; } }; activityVC.completionWithItemsHandler = completionHandler; }
效果:
二、SLComposeViewController
優缺點:
/**
優點:使用簡單、不用註冊繁雜的分享平臺賬號、不用匯入臃腫的SDK包。UI可以自己繪製,滿足了很多個性化的需求。
缺點:分享介面的UI需要開發者自己繪製,增加了工作量。分享的型別受限,只能分享text、url、image。
*/
程式碼:// 分享按鈕的實現方法 - (void)shareBtClick { // Share Extension 分享入口,需要分享到哪個平臺就用哪個平臺的id NSString *socialType = @"com.tencent.mqq.ShareExtension"; /* 1、 系統只提供了下面幾種分享平臺: SLServiceTypeTwitter; SLServiceTypeFacebook; SLServiceTypeSinaWeibo; SLServiceTypeTencentWeibo; SLServiceTypeLinkedIn; 2、iOS8之後系統推出的Share Extension,可以通過App的Share Extension提供了分享入口進行分享如微信的:com.tencent.xin.sharetimeline 實際可以根據id來分享到更多平臺,如微信: NSString *socialType = @"com.tencent.xin.sharetimeline"; SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:socialType]; // 3、 下面是小編整理的部分平臺id 2017-9-15 com.taobao.taobao4iphone.ShareExtension // 淘寶 com.apple.share.Flickr.post}", // Flickr com.apple.share.SinaWeibo.post // 新浪微博 com.laiwang.DingTalk.ShareExtension // 釘釘 com.apple.mobileslideshow.StreamShareService // iCloud com.alipay.iphoneclient.ExtensionSchemeShare // 支付寶 com.apple.share.Facebook.post // Facebook com.apple.share.Twitter.post // Twitter com.apple.Health.HealthShareExtension}", // 應該是健康管理 com.tencent.xin.sharetimeline // 微信(好友、朋友圈、收藏) com.apple.share.TencentWeibo.post // 騰訊微博 com.tencent.mqq.ShareExtension // QQ */ // 建立 分享的控制器 SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:socialType]; if (!composeVC) { [self showAlertViewWithMsg:@"您尚未安裝軟體"]; return; } if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]) { [self showAlertViewWithMsg:@"軟體未配置登入資訊"]; return; } //新增分享的文字、圖片、連結 [composeVC setInitialText:@"哈羅大家好,這是分享測試的內容哦,如已看請忽略!如有任何疑問可聯絡1008611查你話費吧!"]; [composeVC addImage:[UIImage imageNamed:@"動態(1)@2x.png"]]; [composeVC addURL:[NSURL URLWithString:@"http://blog.csdn.net/Boyqicheng"]]; //彈出分享控制器 [self presentViewController:composeVC animated:YES completion:nil]; //監聽使用者點選了取消還是傳送 composeVC.completionHandler = ^(SLComposeViewControllerResult result){ if (result == SLComposeViewControllerResultCancelled) { NSLog(@"點選了取消"); } else { NSLog(@"點選了傳送"); } }; }
小結:
本文是參考“iOS社會化分享方案總結”這篇文章編寫的,文章寫得相當