2017-03-08 162 views
2

我有类似的情况下,此问题iOS: apple universal link if app is not open?。当我点击通用链接时,如果应用程序不在后台,则无法进入func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {}当应用程序不在后台时打开通用链接

我在didFinishLaunchingWithOptions中添加了一些代码。但它不起作用。非常感谢你如果有人能帮上忙。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    let activityDic = launchOptions?[UIApplicationLaunchOptionsKey.userActivityDictionary] 
    if activityDic != nil { 
     // Continue activity here 
     self.window?.rootViewController?.restoreUserActivityState(activityDic as! NSUserActivity) 
    } 


    return true 
} 

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { 
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {   
      if let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "xxx") as? XXXTableViewController { 
       if let window = self.window, let rootViewController = window.rootViewController { 
        var currentController = rootViewController 
        while let presentedController = currentController.presentedViewController { 
         currentController = presentedController 
        } 
        currentController.present(controller, animated: true, completion: nil) 
       } 
      } 
    } 

    return true 

} 

回答

1

使用此代码在AppDelegate中didFinishLaunchingWithOptions方法

//catch if open app from url 
    if let options = launchOptions{ 
     for key in options.keys { 
      if(key == UIApplicationLaunchOptionsKey.url){ 
       if let url = options[key] as? URL{ 
        AppDelegate.handleOpenURLWhenAppIsNotOpen(url) 
       } 
      } 
     } 
    } 

在应用程序委托你需要方法

private class func handleOpenURLWhenAppIsNotOpen(_ url: URL) { 
    //can make what you like 
} 
+0

谢谢您的答复。我试过,但它说AppDelegate没有成员handleOpenURLWhenAppIsNotOpen。如果我输错了,我很抱歉。 – ray

+0

handleOpenURLWhenAppIsNotOpen是我的自定义方法,您可以在其中编写您喜欢的任何内容(在应用程序中显示登录屏幕或其他屏幕)。在我的情况下,我初始化tabBarController并选择四个选项卡中的一个 –

0

我已经使用Branch.io处理通用链接。如果有人需要,以下代码仅供参考。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Override point for customization after application launch. 
    //branch.io 
    let branch: Branch = Branch.getInstance() 
    branch.initSession(launchOptions: launchOptions, andRegisterDeepLinkHandler: {params, error in 
     // If the key 'pictureId' is present in the deep link dictionary 
     if error == nil && params!["pictureId"] != nil { 
      print("clicked picture link!") 
      // load the view to show the picture 
     } else { 
      // load your normal view 
     } 
    }) 
    //branch io 

    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) //don't put it on return 
    return true 
} 

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { 
     // pass the url to the handle deep link call 
     Branch.getInstance().continue(userActivity) 

} 
2
if let activityDic = launchOptions?[UIApplicationLaunchOptionsUserActivityDictionaryKey] { 

     let options = activityDic.allValues.filter({ (option:AnyObject) -> Bool in 

      return option is NSUserActivity 
     }) 

     if options.count > 0 , let userActivity = options[0] as? NSUserActivity{ 
      // User activity handling should be done here 

     } 

    } 

使用,如果你不能在传统的方式访问“userActivity”上面的方法。

1

将此代码为didFinishLaunchingWithOptions函数打开URL时,应用程序启动(斯威夫特3码):

if let url = launchOptions?[UIApplicationLaunchOptionsKey.url] as? URL { //Deeplink 
     // process url here 
    } 
    else if let activityDictionary = launchOptions?[UIApplicationLaunchOptionsKey.userActivityDictionary] as? [AnyHashable: Any] { //Universal link 
     for key in activityDictionary.keys { 
      if let userActivity = activityDictionary[key] as? NSUserActivity { 
       if let url = userActivity.webpageURL { 
        // process url here 
       } 
      } 
     } 
    } 
相关问题