深度链接仅在应用 运行 时有效

Deep Linking only working if app is running

我有一个应用程序,当用户与另一个用户共享应用程序中的特定内容时,它使用深层链接导航到某个页面。这在第二个用户已经 运行 拥有该应用程序时有效,但如果该应用程序不是 运行,它只会打开该应用程序并保留在主屏幕上。我知道我一定在这里遗漏了一些非常简单的东西,但我无法弄清楚,也无法在 google.

上找到任何关于此的答案

我的代码在AppDelegate.swift:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        let urlPath : String = url.path as String!
        let urlHost : String = url.host as String!
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        if(urlHost != "example.com")
        {
            print("Call Not From Correct Host. Not Continuing...")
            return false
        }

        if(urlPath == "/articles"){

            let article: ArticleDetailsViewController = mainStoryboard.instantiateViewController(withIdentifier: "ArticleDetailsViewController") as! ArticleDetailsViewController
            self.window?.rootViewController = article
        } 
        self.window?.makeKeyAndVisible()
        return true
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        return true
    }

这是正确的行为。 你应该在 appliction(_: didFinishLaunchingWithOptions:)

处理它
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    if let url = launchOptions[.url] as? URL, let annotation = launchOptions[.annotation] {
        return self.application(application, open: url, sourceApplication: launchOptions[.sourceApplication] as? String, annotation: annotation)
    }
    return true
}

对于 Swift4.2

if launchOptions != nil{
        let launch = launchOptions![UIApplicationLaunchOptionsKey.userActivityDictionary]! as! Dictionary <String,Any>

        if ((launch["UIApplicationLaunchOptionsUserActivityKey"]! as! NSUserActivity).webpageURL != nil){
            if defaults.bool(forKey: DEFAULTS_IS_FIRST_START){
                print((launch["UIApplicationLaunchOptionsUserActivityKey"]! as! NSUserActivity).webpageURL)
            }
        }
    }
func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    if let url = launchOptions?[.url] as? URL {
        return handleWidgetUrl(url)
    }

    return true
}
// Custom function to handle url and do some actions
private func handleWidgetUrl(_ url: URL) -> Bool {}

如果您正在使用 sceneDelegate scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) 函数将在终止状态后启动应用程序时起作用。

url 深度链接将在 connectionOptions.urlContexts

中可用
 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    navigateToDeepLinkScreen(urlContexts: connectionOptions.urlContexts)
}