项目需求
1.从微信\QQ导入文件
2.从iCloud导入文件
思路
从微信/QQ导入文件
1.APP内打开微信/QQ
2.微信/QQ选取文件
3.选择其他应用打开
4.APP内接收
从本地导入文件
1.打开iCloud
2.选择文件
3.APP内接收
实现需求1
1.APP内打开微信/QQ,首先需要设置白名单,在项目info.plist文件添加LSApplicationQueriesSchemes字段,类型设置Array,添加微信:weixin;QQ:mqq,添加完成如下图所示:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>mqq</string>
<string>weixin</string>
</array>
image.png
2.添加其他应用打开权限,在项目info.plist文件添加CFBundleDocumentTypes字段,类型设置Array
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string></string>
<key>LSHandlerRank</key>
<string>Default</string>
<key>LSItemContentTypes</key>
<array>
<string>com.adobe.pdf</string>
<string>com.microsoft.word.doc</string>
<string>com.microsoft.powerpoint.ppt</string>
<string>public.item</string>
<string>public.data</string>
<string>public.text</string>
<string>public.content</string>
<string>public.composite-content</string>
</array>
</dict>
</array>
image.png
3.app内打开微信/QQ
//从qq获取文件
- (IBAction)touchGoQQBtn:(id)sender {
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"mqq://"]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mqq://"] options:@{} completionHandler:nil];
}
}
//从微信获取文件
- (IBAction)touchGoWeChatBtn:(id)sender {
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin://"]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://"] options:@{} completionHandler:nil];
}
}
4.微信/QQ内操作
打开文件
5.app内接收文件,在AppDelegate添加以下方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
// 文件路径file:///private/var/mobile/Containers/Data/Application/B5C8630F-0A5D-4795-B3D0-81B8CCAB6909/Documents/Inbox/%E9%A1%B9%E7%9B%AE%E5%91%A8%E6%8A%A5%E6%B1%87%E6%80%BB202100607.xlsx
NSLog(@"url %@",[url absoluteString]);
// 通过前缀来判断是文件
if ([[url absoluteString] containsString:@"file"]) {
NSArray *array = [[url absoluteString] componentsSeparatedByString:@"/"];
// 去除前缀
NSString *fileName = [array lastObject];
fileName = [fileName stringByRemovingPercentEncoding];
//发送通知,附带文件路径
[[NSNotificationCenter defaultCenter] postNotificationName:@"xx" object:path];
//或者本地存储
//Documents目录 :用于存储用户数据或其它应该定期备份的信息。
// tmp 目录:这个目录用于存放临时文件,保存应用程序再次启动过程中不需要的信息。
NSString *path = [NSHomeDirectory() stringByAppendingString:[NSString stringWithFormat:@"/Documents/xx/%@",fileName]];
NSData *data = [NSData dataWithContentsOfFile:path];
//文件写入结果
BOOL result = [data writeToFile:path atomically:YES];
}
return YES;
}
6.接收通知,根据需求处理,,,,
实现需求2
1、登陆开发者后台,配置权限,选择自己的项目
选择自己的项目.png 勾选iCloud权限.pngEdit选择自己的项目
2.xcode配置
image.png
image.png
image.png
以上配置如有遗漏,可能造成的后果有,或不走回调,或回调返回失败,或不能获取文件路径等
3.代码实现
打开iCloud
//从icloud获取文件
- (IBAction)touchGoiCloudBtn:(id)sender {
//设置可以打开的文件类型,如没有设置可打开的类型,iCloud文件将是灰色,无法选中
NSArray *documentTypes = @[@"public.content", @"public.text", @"public.source-code ", @"public.image", @"public.audiovisual-content", @"com.adobe.pdf", @"com.apple.keynote.key", @"com.microsoft.word.doc", @"com.microsoft.excel.xls", @"com.microsoft.powerpoint.ppt"];
UIDocumentPickerViewController *documentPickerViewController = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:documentTypes inMode:UIDocumentPickerModeOpen];
documentPickerViewController.delegate = self;
[self presentViewController:documentPickerViewController animated:YES completion:nil];
}
#pragma mark - UIDocumentPickerDelegate
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
NSArray *array = [[url absoluteString] componentsSeparatedByString:@"/"];
NSString *fileName = [array lastObject];
fileName = [fileName stringByRemovingPercentEncoding];
//如需存储本地,还需从iCloud下载数据
}
网友评论