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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章