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… *框架

相关文章
相关标签/搜索