在我的应用程序中,我们使用Segpay进行支付,没有合适的SDK可以集成,然后我们从后面制作URL,并在SafariViewController
中打开它。
当用户成功完成付款后,我们需要将用户带到首页,我们如何从SafariViewController
知道状态是否成功。
我从SafariViewController
的后端得到了一个响应,例如在Webview页面上:
最佳答案
可以使用WKWebview
代替野生动物园,如下所示。
创建WKWebView
的属性
private var webView: WKWebView!
按照
viewDidLoad
方法中的步骤初始化webview ...let jScript = "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);"
let wkUScript = WKUserScript(source: jScript, injectionTime: .atDocumentStart, forMainFrameOnly: true)
let wkUController = WKUserContentController()
wkUController.addUserScript(wkUScript)
let webConfiguration = WKWebViewConfiguration()
webConfiguration.userContentController = wkUController
webView = WKWebView(frame: view.bounds, configuration: webConfiguration)
webView.navigationDelegate = self
view.addSubview(webView)
let url = URL(string: "https://...") //set url to load in webview
let req = URLRequest(url: url)
webView.load(req)
实现以下
WKWebView
的委托方法。func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("document.getElementById('response_success').textContent", completionHandler: { (html, error) in
if let content = html as? String {
print(content)
if content.lowercased().contains("ok") { //here you can place the status coming from server for comparison
//handle success response
}
}
})
webView.evaluateJavaScript("document.getElementById('response_fail').textContent", completionHandler: { (html, error) in
if let content = html as? String {
print(content)
if content.lowercased().contains("fail") { //here you can place the status coming from server for comparison
//handle fail response
}
}
})
}
注意:您需要要求后端团队使用ID为response_success的标签将数据发布到webview中,如果响应成功,则响应失败(可以根据需要进行更改)
关于ios - 如何将文本从Safari View Controller swift 发送到您的应用程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59189771/