将应用程序从另一个应用程序打开到特定VC

时间:2018-02-28 12:10:19

标签: ios swift ios-universal-links

我是iOS开发人员的新手,我没有找到任何具体的答案。

假设我有一个包含2个目标的应用,FirstApp(firstTarget)和SecondApp(secondTarget)。我在一些帖子中看到你可以从另一个帖子打开一个应用程序,我确实这样做:

if UIApplication.shared.canOpenURL(aUrl as! URL) {
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(aUrl!)
    } else {
        // Fallback on earlier versions
    }

但是我可以将它打开到SecondApp中的特定VC吗?

我在我的项目中包含了UniversalLink,还有AppDelegate方法,其中包含警报:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    print("UNIVERSAL LINK")
    let alert = UIAlertController(title: "Test", message:"Message", preferredStyle: UIAlertControllerStyle.alert)
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
    self.window?.rootViewController?.present(alert, animated: true, completion: nil)

    return true
}

问题是,只有在我再重复一次动作之后它才会起作用。这是第一次只打开应用程序。如果我返回FirstApp并重复操作,则弹出警报。

我可以用其他方式来做,或者你有这样的解决方案吗?

通知是否以相同的方式工作?当我点击它时,它会将您重定向到特定的VC。

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    let noNetworkView = UIView()
    var reachability:Reachability!

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

        return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
    }

    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
        let alert = UIAlertController(title: "Test", message:"Message", preferredStyle: UIAlertControllerStyle.alert)
        alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
        self.window?.rootViewController?.present(alert, animated: true, completion: nil)

        return true
    }

    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        return SDKApplicationDelegate.shared.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
    }

    func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
        return true
    }

    func applicationWillTerminate(_ application: UIApplication) {
        self.reachability.stopNotifier()
        self.saveContext()
    }

1 个答案:

答案 0 :(得分:1)

在应用启动时未调用

continueUserActivity。您必须从didFinishLaunchingOptions上的启动选项中删除Universal Link。看到这个post.我建议使用Branch,因为他们会将这些全部捆绑到一个回调中。