iOS 8.3分享扩展 - 启动URL方案

5

自从iOS 8.3更新后,我的共享扩展(使用URL Scheme调用我的主应用程序)停止工作。我发现我之前使用的UIWebView方法无法再使用。我还尝试了苹果建议的NSExtensionContext方法,但仍然没有结果。你有什么想法吗?以下是我的代码:

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
[self.view addSubview: webView];
NSString *urlString = "com.myappscheme://shareextension";
NSString * content = [NSString stringWithFormat : @"<head><meta http-equiv='refresh' content='0; URL=%@'></head>", urlString];
[webView loadHTMLString:content baseURL:nil];

并且

[self.extensionContext openURL:[NSURL URLWithString:urlString] completionHandler:^(BOOL success)
{
    NSLog(@"fun=%s after completion. success=%d", __func__, success);
}];

在更新我的设备到iOS 8.3之前,我尝试在SLComposeServiceViewController控制器的didSelectPost方法中执行两个代码块,这里之前它能够正常运行。

2个回答

3
你可以尝试使用这段代码,它能够正常工作,但我不确定是否会被苹果接受。
UIResponder* responder = self;
    while ((responder = [responder nextResponder]) != nil) {
        NSLog(@"responder = %@", responder);
        if ([responder respondsToSelector:@selector(openURL:)] == YES) {
            [responder performSelector:@selector(openURL:) withObject:[NSURL URLWithString:@""]];
        }
    }

2

extensionContext.openURL仅适用于Today扩展程序。苹果没有提供公共API来实现此功能,而且在iOS 8.3中,苹果似乎已经封锁了一些解决方法。这似乎是有意为之的。如果您认为需要此功能,请提交增强请求/错误报告。


他们似乎早就定义了这个设计,我在某处读到苹果不打算让扩展程序作为应用启动器工作,但正如你提到的那样,一些变通方法仍然有效,直到8.3出现。奇怪的是,几乎没有关于这种问题的信息,特别是共享扩展。 - edulpn
我会等一会儿再接受你的答案,这样我可能会得到一个更“积极”的答案... - edulpn
可能仍然可以使用“有趣”的代码来实现。您无法在编译时调用UIApplication.openURL,但是您可能可以在运行时执行它,并且它可能有效。但这就像玩火一样。 - Léo Natan
@edulpn 这个答案是正确的,无论它是否像你喜欢的那样“积极”。 - Tom Harrington
我并不是说我不会接受@TomHarrington 的答案...只是我不太确定它是否正确,因为据我所知,它并没有基于苹果的文件...如果另一个更详细和有支持的答案出现了,我可以接受多个答案吗?这就是我的意思... - edulpn
你可以更改被接受的答案。如果有新的信息出现,我也会更新我的答案。 - Léo Natan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接