来自应用扩展的 openURL

Posted

技术标签:

【中文标题】来自应用扩展的 openURL【英文标题】:openURL from App Extension 【发布时间】:2014-06-22 22:21:53 【问题描述】:

ios 8 beta 2 上,应该可以使用写在发行说明中的​​应用扩展中的 openUrl:

但是,当我尝试使用此 API(在 Xcode 6 beta 2 上)时,我收到以下错误:

Beta 2 是否真的解决了这个问题?

【问题讨论】:

【参考方案1】:

您可以使用此代码:

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

API 文档: openURL:completionHandler:

你也可以参考这个问题: openURL not work in Action Extension

【讨论】:

@MassimoPiazza 添加openURL语句时使用哪种类型的扩展?我在操作扩展中尝试了它,但失败了。我只在今天的扩展中成功。你有什么结果? @MassimoPiazza 知道了。我正在处理 Action 扩展,而 openURL 无法工作。等待苹果的回应。 我可能会补充一点,这段代码在 IBAction 中工作,用于覆盖整个小部件的按钮。有没有办法在没有隐形按钮的情况下做到这一点? 只有 Today Extensions 支持 openUrl。看到这个线程:***.com/questions/24297273/…【参考方案2】:

接受的解决方案仅适用于 Today extensions,这是 Swift 3.1(在 iOS10 中测试)中适用于其他扩展类型的有效解决方案:

您需要创建自己的 URL Scheme,然后将此函数添加到您的 ViewController 并使用 openURL("myScheme://myIdentifier") 调用它

//  Function must be named exactly like this so a selector can be found by the compiler!
//  Anyway - it's another selector in another instance that would be "performed" instead.
func openURL(_ url: URL) -> Bool 
    var responder: UIResponder? = self
    while responder != nil 
        if let application = responder as? UIApplication 
            return application.perform(#selector(openURL(_:)), with: url) != nil
        
        responder = responder?.next
    
    return false

【讨论】:

你有没有针对这个的 Objective-C 解决方案? 对不起,我无法处理这个问题。我发现了一些 ObjC 来解决类似的问题,这可能有助于移植:***.com/questions/24495362/… 这对于 MacCatalyst 应用程序非常有用。谢谢。

以上是关于来自应用扩展的 openURL的主要内容,如果未能解决你的问题,请参考以下文章

尝试提交带有 Siri 扩展的应用时,来自 App Store 的“Invalid Intent Vocabulary”错误

来自 Firebase pod 的 FBSDKCoreKit/FBSDKLoginKit?:“sharedApplication”不可用:在 iOS 上不可用(应用程序扩展)

来自 distriqt 广告扩展的 Java 错误

来自 chrome 扩展的 Spring Boot 上的交叉原点

IOS。如果来自不同的目标,则获取捆绑包

Windows XP上的VS Code + WSL应用程序上的CMake扩展