覆盖 canOpenUrl(_:) AppDelegate

Override canOpenUrl(_:) AppDelegate

我有两个应用程序通过 openUrl 相互通信。我希望能够在打开第二个应用程序之前检查几项内容。

即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")
}

这是 App2 的示例代码,它会尝试接受 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
}

如果我 return 错误,无论如何它都会继续发布。不管我在这个函数中 return 是什么,无论如何它都会启动 App2。

在 App2 中有没有办法实现 AppDelegate CanOpenURL 功能?

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

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

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