1. 程式人生 > >iOS之OC使用原生控制元件實現分享到QQ、微信、簡訊、微博等的兩種方法

iOS之OC使用原生控制元件實現分享到QQ、微信、簡訊、微博等的兩種方法

現在任何一款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社會化分享方案總結”這篇文章編寫的,文章寫得相當