我正在尝试从扩展启动容器应用程序。(一个动作扩展)容器应用程序有一个有效的 URL 方案(example://),我可以通过在 Safari 中导航到该 URL 来验证这一点。
当我尝试使用 -[NSExtensionContext openURL:completionHandler:] 启动容器应用程序时,我收到一个不成功的回调并且没有任何反应。
iOS 8 Beta 2 更改说 openURL 方法现在应该可以工作,但这仍然是一个错误还是我做错了什么?
我正在尝试从扩展启动容器应用程序。(一个动作扩展)容器应用程序有一个有效的 URL 方案(example://),我可以通过在 Safari 中导航到该 URL 来验证这一点。
当我尝试使用 -[NSExtensionContext openURL:completionHandler:] 启动容器应用程序时,我收到一个不成功的回调并且没有任何反应。
iOS 8 Beta 2 更改说 openURL 方法现在应该可以工作,但这仍然是一个错误还是我做错了什么?
它使用以下代码在 Today Extension 中为我工作:
NSExtensionContext *myExtension=[self extensionContext];
[myExtension openURL:[NSURL URLWithString:@"http://google.com"] completionHandler:nil];
但是,它可能不适用于操作扩展。从文档中:
每个扩展点决定是否支持这种方法,或者在什么条件下支持这种方法。在 iOS 8.0 中,只有 Today 扩展点支持这种方法。
我的解决方案是创建一个UIWebView
并加载一个带有 url 的请求
如果使用 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];
重要 Apple 允许任何 Today 小部件使用 openURL:completionHandler: 方法打开小部件自己的包含应用程序。
如果您使用此方法从 Today 小部件打开其他应用程序,您的 App Store 提交可能需要额外审查,以确保符合 Today 小部件的意图。
要了解更多信息,请阅读 App Store Review Guidelines 和 iOS Human Interface Guidelines,链接到 Apple 的 App Review Support 页面