iOS 原生分享

和羞走,倚門回首,卻把青梅嗅。

前言

公司最近的一個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、微博多圖分享的時候,分享結果只能顯示一張圖片,且是首張。

后記

我們的產品只是注重多圖分享到微信,系統原生分享的我暫時了解這么多,有什么不對以及不完善的地方,多多留言,互相探討,共同進步。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容