iOS原生分享功能

簡介

在不使用第三方的狀況下,採用系統原生的方法,實現分享功能。有兩種方式,一種是使用UIActivityViewController,另一種是使用Social框架中的SLComposeViewController。兩者的效分別果以下: 方式一的效果:ios

QQ.png

方式二的效果: QQ.pnggit

說明:方式一在選擇完分享平臺後,會來到圖二中作進一步選擇。也就是說,方式二實際上是跳過了前面的選擇面板,直接分享。github

導入#import <Social/Social.h> 注意:從ios11開始,系統不容許跳過前面的選擇面板直接來到圖二(其實是來到了但馬上被dismiss了),因此,ios11後只能採用第一種方式!數組

方式一介紹

//  點擊分享後 執行
-(void)clickShare{
    //分享的標題
    NSString *textToShare = @"分享的標題";
    //分享的圖片
    UIImage *imageToShare = [UIImage imageNamed:@"shareLOGO"];
    //分享的url
    NSURL *urlToShare = [NSURL URLWithString:@"http://www.."];
    
    //若是想分享圖片 就把圖片添加進去 文字什麼的同上
    NSArray *activityItems = @[textToShare,imageToShare, urlToShare];
    // 建立分享vc
    UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
    // 設置不出如今活動的項目
    activityVC.excludedActivityTypes =
    @[UIActivityTypePrint,UIActivityTypeMessage,UIActivityTypeMail,
    UIActivityTypePrint,UIActivityTypeAddToReadingList,UIActivityTypeOpenInIBooks,
    UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll];
    
    [vc presentViewController:activityVC animated:YES completion:nil];
     // 分享以後的回調
    activityVC.completionWithItemsHandler = ^(UIActivityType  _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) {
        if (completed) {
            STLog(@"completed");
            //分享 成功
        } else  {
            STLog(@"cancled");
            //分享 取消
        }
    };

複製代碼
  • excludedActivityTypes 的 可選項:

UIActivityTypeAirDrop, UIActivityTypePostToFacebook, UIActivityTypePostToTwitter, UIActivityTypePostToWeibo, UIActivityTypeMessage, UIActivityTypeMail, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo, UIActivityTypeOpenInIBooks微信

方式二介紹

(iOS11以後 不適用)markdown

//  點擊分享後 執行
-(void)clickShare{
    NSArray * items =  self.SharePic;    //分享圖片 數組

    //  肯定分享服務類型(微信、QQ... ...)
    NSString * serviceType = [self getServiceTypeWithType];

    SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType: serviceType];

    for ( id obj in items){
        if ([obj isKindOfClass:[UIImage class]]){
            [composeVC addImage:(UIImage *)obj];
        }else if ([obj isKindOfClass:[NSURL class]]){
            [composeVC addURL:(NSURL *)obj];
        }
    }
    
    // 添加要分享的文字
    [composeVC setInitialText:@"分享"];
    
    // 設置 分享操做回調
    composeVC.completionHandler = ^(SLComposeViewControllerResult result){
        if (result == SLComposeViewControllerResultDone) {
            NSLog(@"----點擊了發送");
        }
        else if (result == SLComposeViewControllerResultCancelled)
        {
            NSLog(@"----點擊了取消");
        }
    };
    
    @try{
        //  彈出分享框
        [self presentViewController:composeVC animated:YES completion:nil];
        return YES;
    } 
    @catch (NSException *exception){
        NSLog(@"沒有安裝微信");    // 捕獲 異常
        return NO;
    } 
    @finally {
        
    }
    
    return YES;
}
複製代碼
  • 主流的serviceType可選項 :
serviceType = @"com.tencent.xin.sharetimeline";//微信
 serviceType = @"com.tencent.mqq.ShareExtension";//QQ
 serviceType = @"com.apple.share.SinaWeibo.post";//微博
serviceType = @"com.apple.share.TencentWeibo.post"
  com.taobao.taobao4iphone.ShareExtension  //  淘寶 
  com.apple.share.Flickr.post",   //  Flickr 
 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",    // 應該是健康管理
複製代碼

自定義

github.com/CainRun/Act… blog.csdn.net/qq350116542…app

mp.weixin.qq.com/s/8w7Mn9BVR… *框架

相關文章
相關標籤/搜索