1.原生分享的特点
- 优点
使用简单、不用注册繁杂的分享平台账号、不用导入臃肿的SDK包(现在基本都是用cocospod管理)
- 缺点
UI可定制性差,只能使用系统提供的固定样式。分享的类型受限,只能分享text、url、image,文件类
2.两个类型UIDocumentInteractionController(文件类)和UIActivityViewController(text,url,image)
- 这里需要导入头文件#import <Social/Social.h>
3.UIDocumentInteractionController
-
UIDocumentInteractionController 主要用于分享PDF,文件类型(使用这个控制器需要遵循协议UIDocumentInteractionControllerDelegate)
-
效果图如下图:(这里WPS是测试手机上有安装了WPS)
-
代码如下
-
//分享图片或者pdf 文件类 - (void)shareFile { NSString *filePath = [[NSBundle mainBundle] pathForResource:@"WechatIMG15873" ofType:@"jpeg"]; if (!filePath) { //防止filePath导致崩溃 return; } //创建实例 UIDocumentInteractionController *documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filePath]]; //设置代理 documentController.delegate = self; BOOL canOpen = [documentController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES]; if (!canOpen) { NSLog(@"沒有程序可以打开要分享的文件"); } }
-
这里如果出现 filePath 为nil,是在项目中找入到图片,type和图片都存在那么还需要配置一下,如下图:
4.UIActivityViewController
-
效果图如下
-
与上面的区别还是挺大的,这个根据自己项目需求使用,excludedActivityTypes 是一个数组存放开发者想要隐藏的项目 代码如下:
-
//分享图文类 - (void)shareImageTextUrl { //分享的标题 NSString *textToShare = @"分享的标题。"; //分享的图片 UIImage *imageToShare = [UIImage imageNamed:@"huaban_1"]; //分享的url NSURL *urlToShare = [NSURL URLWithString:@"http://www.baidu.com"]; //分享图片 就把图片添加进去 文字 NSArray *activityItems = @[textToShare,imageToShare, urlToShare]; UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil]; //隐藏的项目 activityVC.excludedActivityTypes =@[UIActivityTypePostToFacebook, UIActivityTypePostToTwitter, UIActivityTypePostToWeibo, UIActivityTypeMessage, UIActivityTypeMail, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo, UIActivityTypeAirDrop, UIActivityTypeOpenInIBooks]; [self presentViewController:activityVC animated:YES completion:nil]; // 分享之后的回调 activityVC.completionWithItemsHandler = ^(UIActivityType _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) { if (completed) { NSLog(@"completed"); //分享 成功 } else { NSLog(@"cancled"); //分享 取消 } }; }