我正在开发两个 iOS 应用程序,它们共享相同的钥匙串令牌,当用户通过在 Web 视图中输入用户名和密码登录其中一个应用程序时,它们会收到这些令牌。保存在钥匙串中的令牌有几个小时/几天的时间限制 - 当用户使用应用程序并发出请求/输入正在浏览器中打开的项目时,它们会被刷新。
在 iOS 11 发布之前,应用程序中的 web 视图是一个 SFSafariViewController 实例,这非常方便,因为它在应用程序之间共享 cookie,并且一旦用户在一个应用程序中登录浏览器,他就会自动登录-in 在其他应用程序中,从而实现 SSO 体验。
在 iOS 11 中,SFSafariViewController 的行为发生了变化,它不再在我的两个应用程序中的不同 SFSafariViewController 实例之间共享 cookie。相反,Apple 希望我们使用 SFAuthenticationSession 来实现相同的行为。
在我的应用程序中,我有一个大约 50 行的表格,几乎所有表格都在 SFSafariViewController 中打开不同的 URL。所以现在,在 iOS 11 中,我每次都需要创建一个新的 SFAuthenticationSession 实例(一旦创建实例就不能更改 URL),为了真正显示 web 视图,我需要调用 start() 方法在这个实例上。但是,这个方法只能在同一个实例上调用一次(否则它会返回'false'并且什么都不做),并且每次调用它都会弹出“myapp”要使用“mydomain.com”的通知登录。所以这意味着我的用户在每次点击表格中的一行时都会看到此警报消息。
有没有办法让我的应用程序只显示一次同意警报消息,例如第一次或其他什么?我希望我的用户在我的两个应用程序中拥有 SSO 体验,这就是我首先使用 SFSafariViewController 的原因,但我不希望他们在每次点击应用程序时都看到这个烦人的警报。