应用程序因购买不起作用而在 App Store 审核中被拒绝,但它们可以在物理设备上的沙盒中以及通过 TestFlight 运行

问题描述 投票:0回答:0

因此,我的应用程序集成了消耗性 IAP 和非消耗性 IAP,并且在我的物理设备上正常工作,以及在 TestFlight 上进行测试并进行虚假购买但在应用程序提交审核中被拒绝的朋友:

后续步骤

在服务器上验证收据时,您的服务器需要能够处理从 Apple 测试环境获取收据的生产签名应用程序。建议的方法是让您的生产服务器始终首先根据生产 App Store 验证收据。如果验证失败并显示错误代码“生产中使用的沙箱收据”,您应该改为针对测试环境进行验证。

我的采购经理是这样的:

import StoreKit

class PurchaseManager: NSObject, SKPaymentTransactionObserver,SKPaymentQueueDelegate {
    var delegate: PurchaseProtocol?
    
    var itemNumber = 0
    
    static let shared = PurchaseManager()
    private override init() {
        super.init()
        
        SKPaymentQueue.default().add(self)
    }
    
    func buyInAppPurchase(productID: String) {
        if SKPaymentQueue.canMakePayments() {
            // can make payments
            let paymentRequest = SKMutablePayment()
            paymentRequest.productIdentifier = productID
            SKPaymentQueue.default().add(paymentRequest)
        }else {
            //cant make payments
            
        }
    }
    
    func restorePurchases() {
        print("restore purchases called in purchase brain")
        delegate?.showSpinner()
        SKPaymentQueue.default().restoreCompletedTransactions()
    }
    
    func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
        delegate?.hideSpinner()
    }
    
    func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
        print("restore failed: \(error.localizedDescription)")
    }
    
    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            switch transaction.transactionState {
                
            case .purchased:
                print("transaction success")
                delegate?.hideSpinner()
                SKPaymentQueue.default().finishTransaction(transaction)
                
                delegate?.sendInfo(itemNum: self.itemNumber)
                self.itemNumber = 0
                
                print("purchased: \(transactions)")
            case .failed:
                delegate?.hideSpinner()
                print("transaction failed")
                if let error = transaction.error {
                    print("Transaction failed due to error: \(error.localizedDescription)")
                }
                SKPaymentQueue.default().finishTransaction(transaction)
                self.itemNumber = 0
                print("failed: \(transactions)")

            case .restored:
                print("transaction restored")
                SKPaymentQueue.default().finishTransaction(transaction)
                delegate?.hideSpinner()
                print("restored: \(transactions)")
            case .deferred:
                print("transaction deferred") 
                print("deferred: \(transactions)")
            case .purchasing:
                print("transaction purchasing")
                delegate?.showSpinner()
                print("purchasing: \(transactions)")
            @unknown default:
                print("transaction defaulted")
                self.itemNumber = 0
            }
        }
    }
}

不知道从这里到底要做什么,我看过的所有视频都与我所拥有的没有什么不同,除非我错过了一些东西。有人知道我需要对收据验证做什么以及为什么吗?

ios swift in-app-purchase app-store storekit
© www.soinside.com 2019 - 2024. All rights reserved.