![](/img/trans.png)
[英]Passing UILocalNotification information from AppDelegate to a View 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.