Ios 重写canOpenUrl(:)AppDelegate

Ios 重写canOpenUrl(:)AppDelegate,ios,swift,openurl,Ios,Swift,Openurl,我有两个通过openUrl相互通信的应用程序。在打开第二个应用程序之前,我希望能够检查一些东西 i、 e.App1希望启动App2。因此,App2检查是否可以打开给定的URL。如果可以,继续发射。如果不能,请停止启动并在App1上显示错误 看起来iOS已经有了这个功能,但我不知道如何让它工作 这是来自App1的示例代码,将启动App2 let url = URL(string: "APP2://Screen1") if UIApplication.shared.canOpenURL(url

我有两个通过openUrl相互通信的应用程序。在打开第二个应用程序之前,我希望能够检查一些东西

i、 e.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")
}
这是尝试接受URL的App2的示例代码

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的
方法中使用的结果(uquo:open:options:)


您唯一的选择是让App2掉头并使用一个URL启动App1,该URL告诉App1由于某种原因启动失败。

那么,返回的bool在
应用程序(uU2;:open:options:)
方法中实际做了什么?似乎它被忽略了。操作系统可能会以某种方式使用它,但结果不会传递回App1。好的,因此,从技术上讲,我不知道哪个应用程序启动了App2,因此,如果App2无法打开,我就无法真正跳回上一个应用程序。App1传递给App2的URL需要包含足够的信息,以便App2可以反过来启动App1。我也有同样的问题,尽管我从应用程序(uu:open:options:)方法返回false,直接打开它,而不考虑返回的假值。我需要阻止应用程序打开,如果url不是预期的。