2017-06-13 1 views
2

J'ai une application qui utilise un lien profond pour accéder à une page lorsqu'un utilisateur partage un contenu spécifique dans l'application avec un autre utilisateur. Cela fonctionne lorsque le deuxième utilisateur a l'application en cours d'exécution, mais si l'application ne fonctionne pas, il ouvre simplement l'application et reste sur l'écran principal. Je sais que je dois manquer quelque chose de vraiment simple ici, mais je ne peux tout simplement pas comprendre et ne trouve pas de réponses à ce sujet sur google.Deep Linking fonctionne uniquement si l'application est en cours d'exécution

Mon code 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 
    } 
+0

Avez-vous ajouté schéma d'URL pour .plist fichier? – PiterPan

+0

Oui. Comme je l'ai dit, cela fonctionne parfaitement si l'application fonctionne sur le téléphone. Le seul problème est, quand je quitte l'application entièrement (ne pas le minimiser), cela ne fonctionnera pas. L'application doit être en cours d'exécution pour que cela fonctionne. Il ne sera pas exécuté si l'application n'est pas en cours d'exécution. Il ne lance que l'application, mais n'exécute pas le code pour accéder à l'article –

Répondre

6

Ce comportement est correct. Vous devez gérer dans 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 
} 
+1

PARFAIT !! Réponse bien méritée acceptée! Travailler comme prévu! –