美文网首页
iOS原生分享

iOS原生分享

作者: MQ_Twist | 来源:发表于2018-08-10 09:19 被阅读1391次

    和羞走,倚门回首,却把青梅嗅。

    前言

    公司最近的一个app要求实现微信的多图分享,这倒没啥,问题是产品拿着手机让我看别人家的app是怎么做的,要求和人家的一模一样,纳尼!


    人家的app

    小眼一瞅,这不就是原生的分享嘛,于是开搞。

    iOS原生分享只用到系统的一个类UIActivityViewController,这个类很简单,如图:

    UIActivityViewController
    先撇开里面的初始化方法不说,剩下的也就这一个属性excludedActivityTypes有点意思了。
    excludedActivityTypes
    看注释就知道,这个数组里面类型是不显示的,默认都显示。就是说,点击分享的时候,不想显示的分享平台就加到这个数组里面。数组内容是个枚举,内容如下:
    UIActivityType
    这里面的都是默认显示的,要是不想显示的话就加到上面的那个数组excludedActivityTypes里面。

    下面是当时项目中的代码,只是做了一下简单的封装,小白可以参考一下:

    /**
     *  分享
     *  多图分享,items里面直接放图片
     *  分享链接
     *  NSString *textToShare = @"mq分享";
     *  UIImage *imageToShare = [UIImage imageNamed:@"imageName"];
     *  NSURL *urlToShare = [NSURL URLWithString:@"https://www.baidu.com"];
     *  NSArray *items = @[urlToShare,textToShare,imageToShare];
     */
    + (void)mq_share:(NSArray *)items target:(id)target success:(SucceessBlock)successBlock;
    
    /** 分享 */
    + (void)mq_share:(NSArray *)items target:(id)target success:(SucceessBlock)successBlock {
        if (items.count == 0 || target == nil) {
            return;
        }
        UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
        if (@available(iOS 11.0, *)) {//UIActivityTypeMarkupAsPDF是在iOS 11.0 之后才有的
            activityVC.excludedActivityTypes = @[UIActivityTypeMessage,UIActivityTypeMail,UIActivityTypeOpenInIBooks,UIActivityTypeMarkupAsPDF];
        } else if (@available(iOS 9.0, *)) {//UIActivityTypeOpenInIBooks是在iOS 9.0 之后才有的
            activityVC.excludedActivityTypes = @[UIActivityTypeMessage,UIActivityTypeMail,UIActivityTypeOpenInIBooks];
        }else {
            activityVC.excludedActivityTypes = @[UIActivityTypeMessage,UIActivityTypeMail];
        }
        activityVC.completionWithItemsHandler = ^(UIActivityType  _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) {
            if (completed) {
                MQLog(@">>>>>success");
                if (successBlock) {
                    successBlock(YES, @"");
                }
            }else {
                MQLog(@">>>>>faild");
                if (successBlock) {
                    successBlock(NO, @"");
                }
            }
        };
        //这儿一定要做iPhone与iPad的判断,因为这儿只有iPhone可以present,iPad需pop,所以这儿actVC.popoverPresentationController.sourceView = self.view;在iPad下必须有,不然iPad会crash,self.view你可以换成任何view,你可以理解为弹出的窗需要找个依托。
        UIViewController *vc = target;
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            activityVC.popoverPresentationController.sourceView = vc.view;
            [vc presentViewController:activityVC animated:YES completion:nil];
        } else {
            [vc presentViewController:activityVC animated:YES completion:nil];
        }
    }
    

    总结

    iOS原生分享优缺点

    • 优点

    1、API使用方便。
    2、是系统集成的,使用的时候,不需要各个平台的appKey以及配置URL Schemes

    • 缺点

    1、除了枚举之外的平台,分享面板上不能忽略。
    2、微博多图分享的时候,分享结果只能显示一张图片,且是首张。

    后记

    我们的产品只是注重多图分享到微信,系统原生分享的我暂时了解这么多,有什么不对以及不完善的地方,多多留言,互相探讨,共同进步。

    相关文章

      网友评论

          本文标题:iOS原生分享

          本文链接:https://www.haomeiwen.com/subject/gjzhbftx.html