Моя проблема странная - я никогда не видел ее на форуме раньше. После запроса IAP (getPurchaseInfo () -> request.start ()), когда я в первый раз нажимаю на него, выдается сообщение об ошибке, так как продукты не найдены. Однако, если я попробую еще раз, он сразу же примет идентификатор продукта и разрешит покупку. 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)
}
Я получаю распечатанный «Завершенный запрос продукта» и даже получаю products.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)
}
}
}
Я всегда получаю оповещение об ошибке покупки, которое я настроил, когда я нажимаю на него в первый раз, но не после этого, пока приложение открыто. Просто не имеет смысла, что он не найдет его в первый раз, но во второй раз.