【问题标题】:SceneDelegate to ViewController transition via URL SchemeSceneDelegate 通过 URL Scheme 转换到 ViewController
【发布时间】:2020-10-03 15:39:04
【问题描述】:

我有一个 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
}

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

编辑:

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

【问题讨论】:

  • 这太宽泛了。当 URL 进入时,你没有解释你想做什么,也没有关于你应该做什么的规则。您认为您想与视图控制器对话的想法可能是错误的。我试图在我的回答中进一步解释一下,但我不得不含糊其辞,因为这个问题含糊不清。 — 另外请不要将多个问题合二为一。 viewWillAppear 没有被调用的事实是正常的,所以听起来你只是误解了该事件的含义。但这完全是另一回事。
  • @matt 试图准确描述我在编辑中想要实现的目标,并删除了第二个问题
  • 好吧,就“然后我想将它传回给我的 ViewController”添加任何内容,我的回答告诉你答案。

标签: ios swift oauth-2.0


【解决方案1】:

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

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

您的视图控制器层次结构位于场景委托的window 中,从它的rootViewController 开始。如果您想与之交谈的视图控制器存在,您可以通过视图控制器层次结构与它交谈。

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

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

【讨论】:

    【解决方案2】:

    如果有帮助,我有几个 iOS AppAuth 资源可能会给你一些比较的东西。

    这包括一个功能更全面的 Swift UI 2 示例,您可以在模拟器上运行:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      相关资源
      最近更新 更多