我正在尝试将OAuth2授权代码流作为我的iOS应用程序的一部分来实现。我在SFSafariViewController中打开第三方的OAuth2登录页面,我传递给Safari控制器的URL包含一个通用链接的https重定向uri。当用户最近没有完成OAuth2登录时,Safari控制器显示登录页面,用户按下“登录”按钮,然后重定向uri作为通用链接,将控制权带回应用程序,如预期。 (用户不会在第三方页面上输入凭据,因为Safari已经缓存了它们。)
问题是,如果我立即尝试重复该过程,Safari控制器似乎不会打开第三方的登录页面,并且,根据屏幕顶部显示的主机名判断,它会尝试直接重定向uri,这次没有被视为通用链接。 Safari控制器只显示403错误,因为uri与任何真实网页都不对应。
有谁知道这个问题的原因和/或解决方案?我怀疑它可能与Apple(https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html)记录的这种行为有关:
如果您实例化SFSafariViewController,WKWebView或UIWebView对象以处理通用链接,iOS将在Safari中打开您的网站,而不是打开您的应用程序。但是,如果用户从嵌入式SFSafariViewController,WKWebView或UIWebView对象中点击通用链接,iOS将打开您的应用程序。
这并不完全解释为什么它在第一种情况下起作用而在第二种情况下不起作用,而且它没有解释我如何防止第二种情况发生。