我们的应用程序中有一个 OAuth 流程,我们正在通过打开 ASWebAuthenticationSession 执行“授权步骤”。完成后,我们从回调 URL 中解析出查询参数,验证并继续流程的其余部分。
这对深度链接(自定义应用架构)非常有效,但在使用通用链接时变得非常“不稳定”。
据我所知,Safari 似乎会验证每个导航并根据一些启发式确定它是否应该触发通用链接。在大约 50% 的尝试中它会很好,但在另外 50% 的尝试中会发生常规导航并且用户只会看到我们的 oauth 回调 URL(加上相应的成功或不成功的查询参数),使 ASWebAuthentication 模式保持打开状态.
有没有人经历过这样的事情?知道是什么原因造成的吗?
我们测试/检查:
使用 https 作为回调 URL 方案,或者保留它为零。
重定向回带有路径的 URL。
验证了我们的通用链接处理。
比较所有导航(状态代码、标题等)以了解成功和不成功流程之间的差异。没什么。
通过控制台日志挖掘。
切换到对谷歌作为后端执行 OAuth,仍然有 50% 的时间失败。
切换到使用 AppAuth 而不是使用我们自己的解决方案。它还使用 ASWebAuthSession 并且仍然有 50% 的时间失败。