开发过程中遇到一个特殊的需求,由于使用企业二次签名的ipa包只有使用苹果默认浏览器(既Safari)才会弹出下载弹框,在我们自己的应用中,不想从App外部跳转到safari浏览器,那么就要放弃平时用的WKWebView加载企业签名应用下载链接了,此时可在应用内使用SFSarfariViewController进行加载链接,这样就不会跳出应用并且会弹出下载弹框。直接上代码
1、导入SafariServices框架
import SafariServices
2、在触发按钮或者Banner中加载
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
showSafariViewController()
}
// MARK: Banner点击事件
func showSafariViewController() {
// URL
let url = URL(string: "http://app.karang.cn/?deviceId=7E86073E-8266-4003-8668-E2092E172DB2&appKey=com.dk.MJFANGDAI&appMarket=_ios&version=1.2.0&groupId=1")
// 创建SFSafariViewController
let safariViewController = SFSafariViewController(url: url!)
// 设置代理
safariViewController.delegate = self
// 显示
self.present(safariViewController, animated: false) {
var frame = safariViewController.view.frame
frame.size = CGSize(width: frame.width, height: frame.height + KTabBarHeight)
// frame = CGRectMake(0, -KNaviBarHeight, KScreenWidth, kScreenHeight+KTabBarHeight+KNaviBarHeight)
safariViewController.view.frame = frame
}
}
3、遵守协议进行监听
extension HTClassHomeViewController: SFSafariViewControllerDelegate {
// MARK: 点击左上角的完成
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
print(#function)
}
// MARK: 加载完成
func safariViewController(_ controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool) {
print(#function)
}
// MARK: 点击右下角调用Safari浏览器打开
func safariViewControllerWillOpenInBrowser(_ controller: SFSafariViewController) {
print(#function)
}
}
至此,已经实现了在应用内展示二次签名应用的下载弹框。