Mac 通用链接(Universal Links)第一次无法打开

2021-09-11  本文已影响0人  北_极_狐

在Mac上通用链接默认打开方式为浏览器时候无法直接调起APP ,需要指定APP路径
macOS10.15提供了一个接口可以指定路径并设置一些参数,代码中只写了一部分,有其它需求可自行查看系统文档

lazy var appURL: URL? = {
    //  通用链接自行拼接
    let urlString = "https://xxx.xxx.com/xxx/xxx/xxx/?" + "parameter=" + "xxx"
    return URL(string: urlString)
}()

if let strongAppURL = appURL {
        if #available(macOS 10.15, *) {
            let configuration = NSWorkspace.OpenConfiguration()
            // 一个布尔值,指示您是否要打印文档和 URL 的内容而不是打开它们。
            configuration.isForPrinting = false
            // 一个布尔值,指示您是否要求 URL 具有关联的通用链接。
            configuration.requiresUniversalLinks = true
            // 一个布尔值,指示系统是否激活应用程序并将其置于前台。
            configuration.activates = true
            // 一个布尔值,指示您是否希望系统启动应用程序的新实例。
            configuration.createsNewApplicationInstance = false
            // 一个布尔值,指示是否向用户显示错误、身份验证请求或其他 UI 元素。
            configuration.promptsUserIfNeeded = false
            // 一个布尔值,指示是否使用正在运行的应用程序实例,即使它位于不同的 URL。
            configuration.allowsRunningApplicationSubstitution = true
            // 应用程序文件夹
            if let path = FileManager.default.urls(for: .applicationDirectory, in: .localDomainMask).first?.appendingPathComponent("名称.app") {
                NSWorkspace.shared.open([strongAppURL],
                                        withApplicationAt: path,
                                        configuration: configuration) { app, error in
                    guard error == nil else {
                        print("打开失败")
                        //直接打开
                        self.gotoLowVersionURL()
                        return
                    }
                    print("打开成功")
                    // 到主线程
                    DispatchQueue.main.async {
                        NSApp.hide(nil)
                    }
                }
            }else {
                gotoLowVersionURL()
            }
        } else {
            // 10.14以下是用直接跳转
            gotoLowVersionURL()
        }
    }

在低于10.15的版本等情况可以直接调旧版的接口

//MARK: 低版本方式跳转(不指定app路径)
func gotoLowVersionURL() {
    if let strongAppURL = appURL {
        let result = NSWorkspace.shared.open(strongAppURL)
        if result == false {
            // 显示到下载页
            if let lastURL =  URL(string: "https://xxx.xxx.com") {
                NSWorkspace.shared.open(lastURL)
            }
        }
        else {
            // 到主线程
            DispatchQueue.main.async {
                NSApp.hide(nil)
            }
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读