【发布时间】:2020-12-29 22:56:53
【问题描述】:
我有一个混合 iOS 应用程序,我在其中通过 javascript 功能来回传递数据。在用户完成应用内购买之前,一切正常。在他们完成购买后,我尝试调用 webView.evaluateJavaScript 和 webView 为 nil,从而引发错误并且不允许我完成该过程。
以下是我如何设置文件。
主视图控制器:
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.swiftfinalizeProductOrder 操作(如下所示)。
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)
}
}
对此的任何帮助将不胜感激。在我接到返回主网站的电话后,我的应用程序已完全正常运行。
谢谢 埃里克。
【问题讨论】:
-
MainViewController()正在初始化一个新实例。您必须将对 MainViewController 的显示实例的引用传递给 PurchaseModel。 -
呃!甚至没有注意到这一点,@WilkoX 绝对正确
标签: ios swift in-app-purchase wkwebview evaluatejavascript