前言:由于iOS的沙盒机制,我们自己开发的App大部分情况下只能控制自己的沙盒空间,想要和系统或其他App互相同享文件一直都比较困难,因此有产品经理设计功能时涉及到文件下载保存,会标注此功能只适合andriod。(iOS表示很尴尬)
现状:随着苹果自己开发的 文件 app,功能越来越完善,我们不用第三方的软件就能很方便的管理iphone的文件,加上iOS8之后出的扩展功能,很多APP实现了自己的扩展,所有目前我们已经能很方便的进行文件的下载和共享功能。
利用UIActivityViewController进行图片和链接的分享,网上已经有很多的攻略,不熟悉的去搜索一下就知道怎么去实现了,这里主要是讲一下文件的操作。
原理:
1.把需要保存到系统,分享给微信和QQ好友的文件,储存到我们app自己的沙盒里面
2.UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[[NSURL fileURLWithPath:filePath]] applicationActivities:nil];
把文件的路径直接放入到initWithActivityItems里面的参数中,注意这里只需要放文件路径的URL即可,相关的标题,图片什么的都不需要加入,否则会默认为图片或链接的分享。
调用完UIActivityViewController之后,我们能看到如下的视图
这时候,我们可以存储到 文件,也可以点击微信和QQ,分享到好友。(要出现微信和QQ,必须有安装对应的应用)。
扩展:
有时候我们的需求可能是一个文件的链接,这时候我们需要怎么实现呢?
其实原理还是一样,需要先把文件通过链接下载到本地,然后获取本地的文件路径进行分享,伪代码如下:
NSURL *shareUrl = [NSURL URLWithString:@"http://www.gov.cn/zhengce/pdfFile/2020_PDF.pdf"];
[[[NSURLSessionsharedSession]dataTaskWithURL:shareUrlcompletionHandler:^(NSData*_Nullabledata,NSURLResponse*_Nullableresponse,NSError*_Nullableerror) {
if(!error) {
//这里需要正确的文件格式,否则分享后无法正常打开,这里可以去获取URL链接里面的文件格式,具体根据实际的业务需求去实现。
NSString *filePath = [NSString stringWithFormat:@"%@/2020_PDF.pdf", NSTemporaryDirectory()] ;
[datawriteToFile:filePathatomically:YES];
dispatch_async(dispatch_get_main_queue(), ^{
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[[NSURL fileURLWithPath:filePath]] applicationActivities:nil];
activityVC.modalPresentationStyle = UIModalPresentationPopover;
[self presentViewController:activityVC animated:YES completion:nil];
});
}
}]resume];
总结:希望对需要的这个功能的人能起到一点帮助。
网友评论