覆盖canOpenUrl(_ :) AppDelegate

问题描述:

我有两个应用程序通过openUrl相互通信。我希望能够在打开第二个应用程序之前检查一些事情。覆盖canOpenUrl(_ :) AppDelegate

即App1想要启动App2。所以App2会检查它是否可以打开给定的URL。如果可以,继续启动。如果不能,停止启动并在App1上显示错误。

似乎iOS已经具备了此功能,但我无法弄清楚如何让它正常工作。

这是App1的示例代码,其将启动App2

let url = URL(string: "APP2://Screen1") 
if UIApplication.shared.canOpenURL(url) { 
    UIApplication.shared.open(url, options: [:], completionHandler: { _ in }) 
} else { 
    self.showError("Couldn't Open App2") 
} 

这是示例代码应用2将尝试接受的URL。

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
    guard options[.sourceApplication] as? String == "com.test.app1" else { return false } 

    if self.canLogInFrom(url) { 
     return true 
    else { 
     return false 
} 

如果我返回false,它会继续发射。不管我在这个函数中返回的是什么,它都会启动App2。

在App2中有一种方法,我可以实现AppDelegate CanOpenURL函数吗?

App1只能检查是否安装了App2,是否可以启动启动以及是否初始启动成功。

App1无法获得App2的application(_:open:options:)方法中使用的结果。

您唯一的选择是让App2转身并启动App1,并通过一个URL告诉App1由于某种原因启动失败。

+0

那么返回的布尔实际在'application(_:open:options:)'方法中做了什么呢?似乎它被忽略了。 – SeanRobinson159

+0

它可能以某种方式被操作系统使用,但结果不会传回给App1。 – rmaddy

+0

好的,所以我在技术上不知道哪个应用程序启动** App2 **,所以如果** App2 **无法打开,我无法真正跳回到之前的应用程序。 – SeanRobinson159