因此,我的应用程序集成了消耗性 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
}
}
}
}
不知道从这里到底要做什么,我看过的所有视频都与我所拥有的没有什么不同,除非我错过了一些东西。有人知道我需要对收据验证做什么以及为什么吗?