iOS调用系统分享功能

iOS调用系统分享功能,第1张

调用下面的方法即可实现系统分享功能

//分享

- (IBAction)RespostClick_Action:(id)sender {

UIImage* image = [UIImage imageNamed:@"icon_share.png"]

NSString *text = @"I found an Awesome application software! InstaDown"

//https://itunes.apple.com/us/app/id1260302654?l=zh&ls=1&mt=8

NSURL *urlToShare = [NSURL URLWithString:[NSString stringWithFormat:@"https://itunes.apple.com/us/app/id%@?l=zh&ls=1&mt=8",[HHLADSManager getValueFromjsondata:@"appid"]]]

NSArray *activityItems = @[text,image,urlToShare]

UIActivityViewController *avc = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil]

[self presentViewController:avc animated:TRUE completion:nil]

// 选中分享类型

[avc setCompletionWithItemsHandler:^(NSString * __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError){

// 显示选中的分享类型

NSLog(@"act type %@",activityType)

if (completed) {

NSLog(@"ok")

}else {

NSLog(@"no ok")

}

}]

UIPopoverPresentationController *popover = avc.popoverPresentationController

if (popover) {

popover.sourceView = self.view

popover.sourceRect = self.view.bounds

popover.permittedArrowDirections = UIPopoverArrowDirectionUp

}

}

这里主要讲利用分享扩展(share extension)实现系统分享到自己app的功能,扩展里面跳转宿主app,及数据传输等

创建成功会生成一个文件夹

info.plist 里面有激活扩展的规则,匹配规则会在系统分享里面出现自己的app。

NSExtensionActivationRule:默认为字符串“TRUEPREDICATE”,表示在分享菜单中一直显示该扩展。生产环境不可用,必须将类型改为Dictionary类型,然后添加以下字段:

默认分享扩展类ShareViewController,自带视图,可以全部自定义,这里不讲诉

跳转宿主app后在一下方法中处理逻辑

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id>*)options

首先要配置相同的 App Groups,必须group.开头

NSUserDefaults *de = [[NSUserDefaults alloc]initWithSuiteName:@"group.(跟上面app groups一致)"]

[de setObject:value forKey:@"key"]

宿主app 获取数据

NSUserDefaults *de = [[NSUserDefaults alloc]initWithSuiteName:@"group.(跟上面app groups一致)"]

id value = [de objectForKey:@"key"]

扩展要选择对应宿主app运行,但扩展属于独立进程,调试的时候运行扩展,宿主app里面的断点不会走,同样运行宿主app,扩展里面的断点不会执行

这里需要将其他应用的文件分享到我们自己的应用,让我们的应用出现在任何文件分享的情况下

效果如图:

分享过来的文件,会存在沙盒下的Documents/Inbox文件夹下。

可以在AppDelegate中重写openURL方法

这里需要注意NSURL转NSString,需要用UTF-8处理下。

这样就可以获取其他App的文件了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11719671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存