ios原生分享

什么是 ios 系统的原生分享呢,如下图所示

具体使用系统UIActivityViewController,完整代码如下:

objectivec 复制代码
-(void)shareAny:(NSString *)text url:(NSString *)_url imagePath:(NSString *)_imagePath
{
    NSLog(@"shareAny, text:%@, url:%@, imagePath:%@", text, _url, _imagePath);
    NSString *textToShare = text;//需要分享的文本内容
    NSArray *activityItems = @[textToShare];

    if (_url != nil) {
        NSURL *urlToShare = [NSURL URLWithString:_url];//需要分享的URL
        activityItems = @[textToShare, urlToShare];
    }

    if (_imagePath != nil) {
       UIImage *imageToShare = [UIImage imageWithContentsOfFile:_imagePath];//需要分享的图片
        activityItems = @[textToShare, imageToShare];
    }

    UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
    // 禁用分享渠道
    activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard,
    UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll];
    // 分享之后的回调
    activityVC.completionWithItemsHandler = ^(UIActivityType  _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) {
        if (completed) {
            NSLog(@"成功分享,分享平台%@",activityType);
        }else{
            NSLog(@"取消分享");
        };
    };

    [self.viewController presentViewController:activityVC animated:true completion:nil];
}

分享到WhatsApp

objectivec 复制代码
- (void) whatsappShareText:(NSString*)text {
    NSLog(@"whatsapp share text %@", text);
    NSString *url = [NSString stringWithFormat:@"whatsapp://send?text=%@", [text stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]];
    NSURL *whatsappURL = [NSURL URLWithString: url];

    if ([[UIApplication sharedApplication] canOpenURL: whatsappURL]) {
        [[UIApplication sharedApplication] openURL: whatsappURL];
    } else {
        // Cannot open whatsapp
        NSLog(@"whatsapp cant't open");
    }
}

分享到Facebook

objectivec 复制代码
- (void) facebookShareUrl:(NSString *)url {
    NSLog(@"facebook share url %@", url);
    if(![self checkAPPIsExist:@"fb"]) {
		NSLog(@"facebook is not exits");
        return;;
    }

    // 首先判断某个平台是否可用(如果未绑定账号则不可用)
    if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
        NSLog(@"facebook is not available");
        return;
    }

    // 创建控制器,并设置ServiceType
    SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
    // 添加要分享的url
    [composeVC addURL:[NSURL URLWithString:url]];
    // 弹出分享控制器
    [self.viewController presentViewController:composeVC animated:YES completion:nil];
    // 监听用户点击事件
    composeVC.completionHandler = ^(SLComposeViewControllerResult result){
        if (result == SLComposeViewControllerResultDone) {
            NSLog(@"facebook share send");
        }
        else if (result == SLComposeViewControllerResultCancelled)
        {
            NSLog(@"facebook share cancel");
        }
    };
}

- (void) facebookShareImage:(NSString *)imagePath {
    NSLog(@"facebook share image %@", imagePath);
    if(![self checkAPPIsExist:@"fb"]) {
        NSLog(@"facebook is not exits");
        return;
    }

    // 首先判断某个平台是否可用(如果未绑定账号则不可用)
    if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
        NSLog(@"facebook is not available");
        return;
    }

    // 创建控制器,并设置ServiceType
    SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
    // 添加要分享的图片
    [composeVC addImage:[UIImage imageWithContentsOfFile:imagePath]];
    // 弹出分享控制器
    [self.viewController presentViewController:composeVC animated:YES completion:nil];
    // 监听用户点击事件
    composeVC.completionHandler = ^(SLComposeViewControllerResult result){
        if (result == SLComposeViewControllerResultDone) {
            NSLog(@"facebook share send");
        }
        else if (result == SLComposeViewControllerResultCancelled)
        {
            NSLog(@"facebook share cancel");
        }
    };
}

//判断是否安装APP
-(BOOL)checkAPPIsExist:(NSString*)URLScheme{
    NSURL* url;
    if ([URLScheme containsString:@"://"]) {
        url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",URLScheme]];
    } else {
        url = [NSURL URLWithString:[NSString stringWithFormat:@"%@://",URLScheme]];
    }
    if ([[UIApplication sharedApplication] canOpenURL:url]){
        return YES;
    } else {
        return NO;
    }
}
相关推荐
国科安芯10 小时前
核电站仪控与监测系统中抗辐射 MCU 芯片应用研究
单片机·嵌入式硬件·macos·无人机·cocos2d·核电站
@大迁世界10 小时前
14个你现在必须关闭的 iOS 26 设置,不然手机很快被它榨干
macos·ios·智能手机·objective-c·cocoa
健忘的萝卜10 小时前
Clawdbot 爆红硅谷,也把 AI Agent 和 Mac mini 推上风口
人工智能·macos·agent·数字员工·clawbot
YJlio18 小时前
10.2.8 以其他账户运行服务(Running services in alternate accounts):为什么“把服务切到某个用户账号下运行”,本质上是在改变服务的整个安全上下文?
python·安全·ios·机器人·django·iphone·7-zip
HashFlag20 小时前
Mac新机基础配置
macos
承渊政道21 小时前
【动态规划算法】(子序列问题解题框架与典型案例)
数据结构·c++·学习·算法·leetcode·macos·动态规划
pop_xiaoli21 小时前
【iOS】KVC与KVO
笔记·macos·ios·objective-c·cocoa
SkyXZ~1 天前
Mac上使用VScode优雅开发STM32
vscode·stm32·macos
90后的晨仔1 天前
《swiftUI进阶 第10章:现代状态管理(iOS 17+)》
ios
brucelee1861 天前
Claude Code 安装教程(Windows / Linux / macOS)
linux·windows·macos