如何解决Swift - 在应用内购买完成后,WebView 为零
我有一个混合 iOS 应用程序,我在其中通过 javascript 功能来回传递数据。一切正常,直到用户完成应用内购买。在他们完成购买后,我尝试调用 webView.evaluateJavaScript
并且 webView
为零,从而引发错误并且不允许我完成该过程。
以下是我如何设置文件。
主视图控制器:
import UIKit
import WebKit
import Foundation
import StoreKit
import SafariServices
class MainViewController: UIViewController,WKUIDelegate,WKScriptMessageHandler {
var webView: WKWebView!
...
override func loadView() {
super.loadView()
...
webView = WKWebView(frame: .zero,configuration: config)
webView.uiDelegate = self
}
...
func finalizeIAPOrder() {
print("webview: \(webView)"). // shows as nil
webView.evaluateJavaScript("purchase_iap_completed()",completionHandler: nil)
}
}
用户将通过 webView
访问网站并进入可以购买产品的页面。该过程正常运行并最终进入我的 PurchaseModel.swift
finalizeProductOrder
操作(如下所示)。
PurchaseModel.swift
import Foundation
import StoreKit
class PurchaseModel {
...
fileprivate func finalizeProductOrder(_ product: SKProduct) {
MainViewController().finalizeIAPOrder()
// I have also tried the line below with the same nil error:
// MainViewController().webView.evaluateJavaScript("purchase_iap_completed()",completionHandler: nil)
}
}
对此的任何帮助将不胜感激。在我接到返回主网站的电话后,我的应用程序就可以正常运行了。
谢谢 埃里克。
解决方法
感谢@WilkoX 的帮助。我最终做的是以下内容:
主视图控制器
import UIKit
import WebKit
import Foundation
import StoreKit
import SafariServices
class MainViewController: UIViewController,WKUIDelegate,WKScriptMessageHandler {
var webView: WKWebView!
var purchaseModel: PurchaseModel?
...
override func loadView() {
super.loadView()
purchaseModel = PurchaseModel(controller: self)
...
webView = WKWebView(frame: .zero,configuration: config)
webView.uiDelegate = self
}
...
func finalizeIAPOrder() {
webView.evaluateJavaScript("purchase_iap_completed()",completionHandler: nil)
}
}
购买模式
import Foundation
import StoreKit
class PurchaseModel {
var controller: MainViewController
init(controller: MainViewController) {
self.controller = controller
}
...
fileprivate func finalizeProductOrder(_ product: SKProduct) {
controller.finalizeIAPOrder()
}
}
还从 this post
找到了帮助版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。