网上找了几个小时都没找到真正的解答,千篇一律说是SceneDelegate管理,但是并没有解决只能进入而不能取到值的问题,实际上就是不走openURLContexts代理方法,因为从scheme启动时仅运行scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)这一个代理,如果需要走openURLContexts则需要手动添加跳转事件,并且启动代理中刚好就能取到scheme的url值,于是我就在启动代理中手动进行一次scheme启动,就可以走进代理了,不知道是不是正规的方法,但是目前没有发现什么问题。
当然,也可以直接在启动代理中设置打开的页面,这样可能会减少一次跳转的延迟。
解决了一天,哭了,问题是从小组件打开应用不能跳转发现的。
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let vc = MainViewController()
self.window?.rootViewController=vc
if connectionOptions.urlContexts.first != nil {
UIApplication.shared.open(connectionOptions.urlContexts.first!.url, options: [:], completionHandler:nil)
}
guard let _ = (scene as? UIWindowScene) else { return }
}
//URL跳转处理
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
for context in URLContexts {
let param = ["url": "\(context.url)"]
NotificationCenter.default.post(name: NSNotification.Name("toast"), object: self, userInfo: param)
}
}
网友评论