SFSafariViewController与原生交互的记录

背景:

来源于一个需求,在app中用SFSafariViewController调用第三方的网页支付后,拿到支付结果通知原生跳转到对应的界面。

为什么要用 SFSafariViewController 呢, 因为 SFSafariViewController中可以保存着用户的账号和密码,用户支付过一次之后,下次用户进来就不用蛋疼的再重新输入账号密码了。

所以就引发了另外一个问题: SFSafariViewController 怎么跟原生交互呢,查了一遍SFSafariViewController的API,然并卵,只首帧才有那么几个相应的回调。并没有WKWebviewUIWebView那么多强大的与原生交互的方法。

Google了一波之后,找到了一个比较奇葩的方法来交互。那就通过 CFBundleURLType来实现的

在打开第三方的支付网页支付完成后,回调到指定的url, 指定的 url 页面一般都是自己公司的,所以在上面触发一个伪协议, 该伪协议scheme
就是项目中info.plistCFBundleURLType指定的。之后就会触发

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *, id> *)options

在该方法中拿到回调 url 就可以为所欲为了。

当然 SFSafariViewController 也会可以获取到对应网页的一些Cookie信息 对应可以参考一下

在app内拿到用户安装app前信息的解决方案(支持iOS11)

SafariViewController: How to grab OAuth token from URL?

SafariAutoLoginTest

最终 : Demo

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容