ios - 打开动态链接时如何重定向到某个屏幕?

标签 ios swift firebase firebase-dynamic-links

我正在开发一个可以接收 Firebase 的动态链接的应用程序。我想要的是当用户单击动态链接时,应用程序会将其重定向到某个 UIViewController .所以我的 AppDelegate.swift 上有一个看起来像这样的代码文件:

@available(iOS 9.0, *)
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool {
        //return GIDSignIn.sharedInstance().handle(url)
        return application(app, open: url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String, annotation: "")
    }

    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        // On progress
        if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
            print("open url = open dynamic link activity")
            print("url = \(dynamicLink)")
            let destinationVC = UIStoryboard(name: "DynamicLink", bundle: nil).instantiateViewController(withIdentifier: "DynamicLinkView") as? DynamicLinkVC
            self.window?.rootViewController?.navigationController?.pushViewController(destinationVC!, animated: true)
        } else {
            print("open url = none")
        }
        return GIDSignIn.sharedInstance().handle(url)
    }

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        // On progress
        let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
            print("dynamic link = \(dynamiclink)")
        }

        if handled {
            let destinationVC = UIStoryboard(name: "DynamicLink", bundle: nil).instantiateViewController(withIdentifier: "DynamicLinkView") as? DynamicLinkVC
            self.window?.rootViewController?.navigationController?.pushViewController(destinationVC!, animated: true)
        }

        return handled
    }

那么,当我单击应用程序立即打开的链接但它没有重定向到所需的 UIViewController 时发生了什么?我想要的(在本例中为 destinationVC )。它像往常一样直接进入登录页面。但是在调试区,链接是这样出现的=

dynamic link = Optional(https://xxxx], match type: unique, minimumAppVersion: N/A, match message: (null)>)



不幸的是,当应用程序不是由 Xcode 构建时,我无法记录日志消息。

我对此很困惑,我的代码有什么问题?我是 iOS 开发的新手,所以我不确定我在哪里做错了。如果您需要更多信息,请随时询问,我会提供给您。任何帮助,将不胜感激。谢谢你。

最佳答案

如果您的其余代码工作正常,并且您在导航到另一个 View Controller 时遇到问题,那么此解决方案将适合您。

如果你想打开特定的 View Controller ,同时单击动态链接,然后更新您在 restorationHandler 中编写的代码,下面更新的代码将帮助您重定向/导航到特定的 View Controller

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        // On progress
        let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
            print("dynamic link = \(dynamiclink)")
        }

    if handled {

             let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "DynamicLink", bundle: nil)
             if let initialViewController : UIViewController = (mainStoryboardIpad.instantiateViewController(withIdentifier: "DynamicLinkView") as? DynamicLinkVC) {
                    self.window = UIWindow(frame: UIScreen.main.bounds)
                    self.window?.rootViewController = initialViewController
                    self.window?.makeKeyAndVisible()
               }

        return handled
    }


希望这能解决您的问题。

关于ios - 打开动态链接时如何重定向到某个屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62143951/

相关文章:

ios - 我只想左右移动图像

ios - 遇到 CKSubscription 错误 : "Cannot create or modify field ' notif_num_subtitle_loc_args'"

javascript - 取消事务时在后续 storekit.init 上出现多个 "Cannot connect to iTunes store"消息 -Cordova/Phonegap

swift - 来自文本字段的 Alamofire 参数

json - Swift json 时间值到本地时区

swift - 如何从 firebase 仅检索 UID 并在 TableView 中显示

objective-c - 使一个变量依赖于另一个变量

swift - 错误: Cannot find an overload for 'contains' that accepts an argument type in while loop

javascript - 如何禁用过多的 actions-on-google 日志 - api.ai

android - 使用 Firebase UI 的 Firebase 电话身份验证存在 SafetyNet 问题