iOS SDK 3.2+上的SFSafariViewController支持 sfsafariviewcontroller-support-on-ios-sdk-3.2
由于安全要求,某些MVPD的登录页必须在SFSafariViewController中显示,而不是Web视图中。
有些MVPD要求它们的登录页必须在安全的浏览器控件(如SFSafariViewController)中显示。 它们会主动阻止Web视图,因此为了能够使用它们进行身份验证,我们必须使用SVC。
兼容性 compatiblity
从iOS SDK版本3.1开始,AccessEnabler SDK根据服务器配置自动显示SFSafariViewController中特定MVPD的登录页面。
SDK版本3.1自动从应用程序的根视图控制器中显示SFSafariViewController。 虽然这简化了实施者的登录页面管理,但在某些情况下,由于应用程序的特定实施(如模态控制器已经可见),无法从根视图控制器中演示SFSafariViewController。
对于这种情况,3.2版本引入了程序员手动管理SVC的功能。
手动SVC管理 manual-svc-management
要手动管理SVC,实施人员必须执行以下步骤:
-
在AccessEnabler初始化后调用 setOptions(["handleSVC":true]) (确保在身份验证开始前执行此调用)。 这将启用“手动”SVC管理,SDK不会自动呈现SVC,而是在需要时显示 调用 navigate(toUrl:{url} useSVC:true)。
-
在实施中实施可选回调
navigateToUrl:useSVC:
,您必须使用提供的URL使用SFSafariViewController实例创建svc实例,并将其显示在屏幕上:code language-obj-c func navigate(toUrl url: String!, useSVC: Bool) { svc = SFSafariViewController(url: URL(string: url)!) svc.delegate = self myController.present(svc, animated: true) }
注释:
- 您可以根据需要自定义SFSafariViewController。 例如,在iOS 11+上,您可以将“完成”标签更改为“取消”。
- 为了能够关闭svc,您需要引用它,请不要在 navigateToUrl:useSVC 的范围内创建它
- 对“myController”使用您自己的视图控制器
-
在应用程序的 应用程序(_app: UIApplication)的委托实现中,打开URL: URL,选项: [UIApplicationOpenURLOptionsKey: Any]) -> Bool,添加代码以关闭svc。 您应该已经有一些调用 accessEnabler.handleExternalURL() 的代码。 就在下面,添加:
code language-obj-c if(svc != nil) { svc.dismiss(animated: true) }
同样,svc是对您在步骤2中创建的SFSafariViewController的引用。
-
从 SFSafariViewControllerDelegate 实现 safariViewControllerDidFinish(_控制器: SFSafariViewController),以便捕获用户何时使用“完成”按钮取消了svc。 在此函数中,要通知SDK身份验证已取消,您需要调用:
code language-obj-c accessEnabler.setSelectedProvider(nil)