繁体   English   中英

将信息从通用链接传递到视图 controller

[英]Passing information from universal link into view controller

我已经建立了一个成功的通用链接,打开后会将用户推送到“回调”屏幕。 这个通用链接在成功连接到第三方 API 后被调用。成功后,这个 API 返回一个“代码”,我需要在我的应用程序后端做一些事情。

目前,我可以使用以下代码在我的场景委托中成功记录此代码:

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
        // the url is going to be in userActivity.webpageURL
        
        guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
                let incomingURL = userActivity.webpageURL,
                let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true) else {
                return
            }

            // Check for specific URL components that you need.
            guard let params = components.queryItems else {
                return
            }

            if let code = params.first(where: { $0.name == "code" } )?.value {

                print("code = \(code)")
                if (userActivity.webpageURL?.lastPathComponent == "callback") {
                guard let windowScene = (scene as? UIWindowScene) else { return }

                        print(code)
                        self.window = UIWindow(windowScene: windowScene)
                        //self.window =  UIWindow(frame: UIScreen.main.bounds)

                        let storyboard = UIStoryboard(name: "Main", bundle: nil)
                        guard let rootVC = storyboard.instantiateViewController(identifier: "CallbackViewController") as? CallbackViewController else {
                            print("ViewController not found")
                            return
                        }
                        let rootNC = UINavigationController(rootViewController: rootVC)
                        self.window?.rootViewController = rootNC
                        self.window?.makeKeyAndVisible()
            }

            } else {
                print("Code is missing")
                return
            }
        
    }

此代码作为传入 URL queryItems 访问,并且可以成功记录。

我需要采取的下一步是在我的视图 controller 中访问此代码。为此,我尝试在 viewDidLoad 中像这样访问场景委托:

override func viewDidLoad() {
        
        if let sceneDelegate = self.view.window?.windowScene?.delegate as? SceneDelegate {
          let variableToAccess = sceneDelegate.code
          print(variableToAccess)
        }
    }

但是,代码显然不存在。 有谁知道我在这里做错了什么?

您可以在实例化CallbackViewController时设置它,而不是尝试从CallbackViewController返回您的场景委托。

假设CallbackViewController看起来像这样:

class CallbackViewController : UIViewController {
  var code : String?
} 

然后当你实例化它时:

guard let rootVC = storyboard.instantiateViewController(identifier: "CallbackViewController") as? CallbackViewController else {
   print("ViewController not found")
   return
}
rootVC.code = code

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM