尝试在iOS 8共享扩展程序中使用[self.extensionContext openURL:... completionHandler:...];
来打开包含的应用程序永远不会打开应用程序,并始终成功调用完成处理程序= NO。
Here与Action扩展相同,但我认为共享扩展能够打开包含应用程序比使用Action扩展更合理。共享扩展的要点是上传可能很大的数据,并且在不打开应用程序的情况下执行此操作的唯一方法是NSURLSession
,它只能执行HTTP(S)上传。但是,应用程序可能希望通过与HTTP(S)上载不同的机制来共享内容。
Apple文档并未声明openURL...
不能用于任何特定类型的扩展。很难知道这是一个错误还是预期的行为。没有关于此的官方信息。
答案 0 :(得分:8)
以下是一些可能的解决方法...... Communicating with/opening Containing app from Share extension
实际工作的那些可以概括为:
application:handleEventsForBackgroundURLSession:completionHandler:
方法。然后,在该方法中,您可以调用[[UIApplication sharedApplication] openURL:url]
打开您想要的任何内容。这些方法都不完美,但它们确实有效(不确定苹果是否会喜欢它们)。有关详细信息,请查看链接。希望这会有所帮助:)
编辑:您还可以使用描述为https://stackoverflow.com/a/24614589/3923882
的UIWebView答案 1 :(得分:1)
文档确实表明"扩展点决定是否支持此方法"实际上只有使用Today Extension的人才能使用openUrl启动他们的主机应用程序。共享,操作,键盘和文档提供程序不为任何人工作(测试版5)。
答案 2 :(得分:0)
我使用的方法不涉及任何后台任务:
UIViewController
(而不是默认的SLComposeServiceViewController
)子类进行共享扩展,以便添加自定义布局; UIWebView
并加载一个HTML字符串,其中包含指向您应用的自定义网址的链接; webView:shouldStartLoadWithRequest:navigationType:
方法拦截链接上的点击,在返回YES之前,使用NSUserDefaults
initWithSuiteName:
(提供应用程序组的名称)将数据保存在共享的容器中您的扩展程序和包含的应用程序。点击网络链接会启动该应用,可以直接在NSUserDefaults
中获取数据。
答案 3 :(得分:0)
这是我在键盘扩展程序中使用的内容。我希望它也有帮助:
UIWebView * webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
NSString *urlString = @"https://itunes.apple.com/us/app/watuu/id304697459";
NSString * content = [NSString stringWithFormat : @"<head><meta http-equiv='refresh' content='0; URL=%@'></head>", urlString];
[webView loadHTMLString:content baseURL:nil];
[self.view addSubview:webView];
[webView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:2.0];
请注意,在这种情况下,我将从UIInputViewController实例化此调用。
此方法也可以使用包含应用程序的URL方案
答案 4 :(得分:0)
https://www.jianshu.com/p/a24ae0eb69d5,您必须先设置url方案。我已经使用了它,我的应用已成功提交到AppStore。
const quizId = this.activatedRoute.snapshot.paramMap.get('quizId');
const indexOfQuizId = this.quizData.findIndex(el => el.id === quizId);