通过URL方案将SceneDelegate过渡到ViewController

时间:2020-10-03 15:39:04

标签: ios swift oauth-2.0

我有一个OAuth授权代码工作流,该工作流由ViewController启动,并通过自定义URL方案重定向回我的应用程序。在外部应用程序上完成授权后,重新进入应用程序后,SceneDelgate.swift中的以下功能确实会正确命中:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    //I am able to get the authorization code and scopes from the URLContexts
}

查看URLContext,我可以看到需要返回的数据(并且我知道如何提取它)。我的问题是我应该如何将这些数据传递到ViewController上,当继续执行此SceneDelegate函数时,它看起来确实会返回到??

编辑:

我想要实现的是提取位于scene()函数的URLContexts参数中的URL参数字符串(authorizationCode)。然后,我想将其传递回ViewController,以便它可以处理需要完成的剩余工作。

2 个答案:

答案 0 :(得分:0)

查看URLContext,我可以看到需要返回的数据(并且我知道如何提取它)。我的问题是我应该如何将这些数据传递到ViewController上,当继续执行此SceneDelegate函数时,它看起来确实会返回到??

如何响应URL的到达完全取决于您。

您的视图控制器层次结构从其window开始位于场景委托人的rootViewController中。如果存在要与之交谈的视图控制器,则可以通过在视图控制器层次结构中的工作方式与之对话。

不过,更理想的情况是,您只需将此信息存储在某处,并发出某种通知或订阅,您的界面就可以在需要时听到并做出响应。

有时候,更激烈的行为是可取的。您可能想通过显示应用程序的特定场景来做出响应。在这种情况下,您可能需要拆除整个视图控制器层次结构,然后重新构建它以显示该场景。在应用程序导航的基础上拥有良好的路由器体系结构会有所帮助。

答案 1 :(得分:0)

如果有帮助,我有一个最新的Swift UI AppAuth示例,可以为您提供一些比较的参考。

我记得在执行此操作时有些挠头,但是您应该能够在模拟器上运行示例:

这是我的Scene Delegate Class,我怀疑您需要对NSUserActivity参数使用方法重载。

如果您使用的是自定义URI方案,那么在为简单的代码示例启用有效登录功能方面,我的iOS AppAuth Page也可能有用。