我的应用被苹果拒绝了,因为他们无法让我的IAP工作。我只通过Xcode进行测试,一切似乎都运行良好(我不知道要通过TestFlight进行测试)。我一直在通过TestFlight进行测试,IAP并不适用于此。
谁能提供任何建议,我在哪里做错了?我添加了"In-App purchase"到签约&功能。我在TestFlight中测试了两个StoreKit Configuration设置为"none"。以及"configuration .storekit"。
我在App Store Connect上的IAP状态为"Ready to Submit"。
import StoreKit
class Menu: SKScene, SKProductsRequestDelegate, SKPaymentTransactionObserver {
enum Product: String, CaseIterable {
case premium = "[my IAP identifier]"
}
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
if let oProduct = response.products.first {
print("Product is available")
self.purchase(aproduct: oProduct)
} else {
print("Product is not available")
}
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .purchased:
SKPaymentQueue.default().finishTransaction(transaction)
print("Purchased")
purchasedPremium = true
userDefaults.set(true, forKey: "purchasedPremium")
var transition:SKTransition = SKTransition.fade(withDuration: 1)
var scene:SKScene = Menu(size: self.size)
self.view?.presentScene(scene, transition: transition)
case .failed:
SKPaymentQueue.default().finishTransaction(transaction)
print("Failed")
case .restored:
print("Restored")
case .deferred:
print("Deferred")
default:
break
}
}
}
func purchase(aproduct: SKProduct) {
let payment = SKPayment(product: aproduct)
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().add(payment)
}
我通过运行这个方法来触发购买过程:
func buyPremium() {
if SKPaymentQueue.canMakePayments() {
let set : Set<String> = [Product.premium.rawValue]
let productRequest = SKProductsRequest(productIdentifiers: set)
productRequest.delegate = self
productRequest.start()
}
}
您为您的产品请求和购买实现的流程不正确。
当用户发起购买时,您不应该请求该产品,当检索到SKProduct
时,您不应该发起购买。
你应该采用如下格式:
- 实例化"采购经理";
didFinishLaunching
中的对象 - "采购经理"应:
- 设置自己为支付队列观察者。
- 检查
canMakePayments
- 如果
true
,则请求您的产品 - 如果你成功检索你的产品,存储
SKProduct
并向你的应用程序视图表明IAP可用
你的视图可以显示/启用购买UI(按钮等) - 当用户点击购买按钮时,你会得到你的"购买经理"。提交
SKPayment
- 一旦购买完成,保持购买状态并刷新视图以解锁购买的内容
在启动时立即建立队列观察者是很重要的,因为队列中可能有待处理的购买需要应用程序处理。
检查产品可用性和canMakePayments
首先通过确保他们没有显示他们不能使用的购买选项来改善用户体验