NSExtensionContext openURL 不起作用

Posted

技术标签:

【中文标题】NSExtensionContext openURL 不起作用【英文标题】:NSExtensionContext openURL doesn't work 【发布时间】:2014-07-02 18:11:13 【问题描述】:

我正在尝试从扩展程序启动容器应用程序。 (一个动作扩展) 容器应用程序有一个有效的 URL 方案 (example://),我可以通过在 Safari 中导航到该 URL 来验证这一点。

当我尝试使用 -[NSExtensionContext openURL:completionHandler:] 启动容器应用程序时,我收到一个不成功的回调并且没有任何反应。

ios 8 Beta 2 的更改表明 openURL 方法现在应该可以工作,但这仍然是一个错误还是我做错了什么?

【问题讨论】:

【参考方案1】:

使用此代码在 Today Extension 中为我工作:

NSExtensionContext *myExtension=[self extensionContext];
[myExtension openURL:[NSURL URLWithString:@"http://google.com"] completionHandler:nil];

但是,它可能不适用于操作扩展。来自documentation:

每个扩展点决定是否支持这种方法,或者 在什么条件下支持这种方法。在 iOS 8.0 中,只有 Today 扩展点支持此方法。

【讨论】:

【参考方案2】:

我的解决方案是创建一个UIWebView 并加载一个带有 url 的请求

【讨论】:

【参考方案3】:

如果使用 unicode 字符,则必须转换为 utf8 字符串。

NSString* toUtf8= [yourString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSString *urlString = [NSString stringWithFormat:@"openMap://?lat=%f&lon=%f&%@",[self.koordX floatValue],[self.koordY floatValue],toUtf8];

[self.extensionContext openURL:[NSURL URLWithString:urlString]  completionHandler:nil];

【讨论】:

【参考方案4】:

https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSExtensionContext_Class/index.html#//apple_ref/occ/instm/NSExtensionContext/openURL:completionHandler:

重要 Apple 允许任何 Today 小部件使用 openURL:completionHandler: 方法打开小部件自己的包含应用程序。

如果您使用此方法从 Today 小部件打开其他应用,您的 App Store 提交可能需要额外审核,以确保符合 Today 小部件的意图。

要了解更多信息,请阅读 App Store Review Guidelines 和 iOS Human Interface Guidelines,链接到 Apple 的 App Review Support 页面

【讨论】:

以上是关于NSExtensionContext openURL 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用分机拨打电话号码? [复制]

iOS 操作扩展,从 Safari 共享 PDF 失败

在IOS8中使用共享扩展时如何获取源应用程序的bundleId