我的问题很奇怪-我以前从未在论坛上见过。第一次单击IAP(getPurchaseInfo()—> request.start())时,它给我一个错误,没有找到产品。但是,如果我立即重试,它将接受产品ID,并允许购买。 Apple拒绝了我的提交,因为起初我有此错误,我不知道如何解决。
我需要使用IAP的许多功能,其中一些是我认为可能有用的功能。
func getPurchaseInfo() {
if SKPaymentQueue.canMakePayments() {
let request = SKProductsRequest(productIdentifiers: NSSet(objects: self.productID) as! Set<String>)
request.delegate = self
request.start()
print("Completed Product Request.")
}
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
var products = response.products
print(products.count)
if products.count == 0 {
//Tell the user there are no products found!
let prodError = UIAlertController(title: "Error", message: "No products were found.", preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
prodError.addAction(okAction)
self.view?.window?.rootViewController?.present(prodError, animated: true, completion: nil)
}
else {
product = products[0]
print(productID)
}
我得到“已完成产品请求”的打印,甚至得到了product.count为1以及正确的productID,这意味着有一个产品。但是,我仍然收到一条错误消息(针对这种情况设置了AlertController),告诉我没有产品,如果删除了我为向我显示该错误而导致应用崩溃的AlertController,这意味着找不到产品。 这是我单击按钮以购买IAP的功能:
func purchase() {
SKPaymentQueue.default().add(self)
self.getPurchaseInfo()
if self.product == nil {
let errorPurchasing = UIAlertController(title: "Error", message: "There was an error requesting the purchase. Please try again.", preferredStyle: .alert)
let okayButton = UIAlertAction(title: "OK", style: .default, handler: nil)
errorPurchasing.addAction(okayButton)
self.view?.window?.rootViewController?.present(errorPurchasing, animated: true, completion: nil)
}
else {
let payment = SKPayment(product: self.product!)
SKPaymentQueue.default().add(payment)
if let myP = self.product {
let payment = SKPayment(product: myP)
SKPaymentQueue.default().add(payment)
}
}
}
当我第一次单击它时,我总是收到我设置的“错误购买”警报,但在此应用程序打开后却没有。只是第一次找不到就没有意义,而第二次才找到。
答案 0 :(得分:1)
我建议保留实例变量中的SKProductsRequest
,以免被释放。
类似
self.request = SKProductsRequest(....)