iOS 原生分享

1,590 阅读1分钟

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");
                  //分享 取消
              }
          };
      }