问题描述
我的应用程序内置了应用程序内购买(我按照本教程进行了操作)并且购买有效。但是,当我在 App Store 中兑换促销代码以进行其中一项应用内购买时,我的应用没有响应。连App Store都不行 说产品兑换成功app store无法兑换代码,我的app没有反应。
有没有人测试过您的应用是否可以处理促销代码?你介意分享解决方案吗?
我从这个开始:
override func viewDidLoad() { NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive(notification:)), name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil ) } func applicationDidBecomeActive(notification: NSNotification){ let store = IAPHealper() //what needs to be put here? } extension IAPHelper: SKPaymentTransactionObserver { public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch (transaction.transactionState) { case .purchased: completeTransaction(transaction) break case .failed: failedTransaction(transaction) break case .restored: restoreTransaction(transaction) break case .deferred: break case .purchasing: break } } } fileprivate func completeTransaction(_ transaction: SKPaymentTransaction) { print("completeTransaction...") deliverPurchaseNotificatioForIdentifier(transaction.payment.productIdentifier) defaultQueue.finishTransaction(transaction) purchaseCompletionHandler?(true, transaction) } fileprivate func restoreTransaction(_ transaction: SKPaymentTransaction) { guard let productIdentifier = transaction.original?.payment.productIdentifier else { return } print("restoreTransaction... (productIdentifier)") deliverPurchaseNotificatioForIdentifier(productIdentifier) defaultQueue.finishTransaction(transaction) } fileprivate func failedTransaction(_ transaction: SKPaymentTransaction) { print("failedTransaction...") if transaction.error!._code != SKError.paymentCancelled.rawValue { print("Transaction Error: (String(describing: transaction.error?.localizedDescription))") purchaseCompletionHandler?(false, transaction) } defaultQueue.finishTransaction(transaction) } fileprivate func deliverPurchaseNotificatioForIdentifier(_ identifier: String?) { guard let identifier = identifier else { return } purchasedProductIdentifiers.insert(identifier) //NSNotificationCenter.defaultCenter().postNotificationName(IAPHelper.IAPHelperPurchaseNotification, object: identifier) } public func paymentQueue(_ queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]){ print("Removed from queue.") print(transactions) } }
谢谢。
推荐答案
@提供了非常有用的信息。我只是想总结一下处理消耗品兑换促销代码的解决方案。
一世。您应该使用并将此代码放入:
SwiftyStoreKit.completeTransactions(atomically: true) { purchases in for purchase in purchases { switch purchase.transaction.transactionState { case .purchased, .restored: if purchase.needsFinishTransaction { SwiftyStoreKit.finishTransaction(purchase.transaction) } // Unlock content self.unlockIAPContent(productID: purchase.productId) case .failed, .purchasing, .deferred: break // do nothing } } }
二.如果要任意调用逻辑app store无法兑换代码,请考虑使用,将代码放在//解锁内容中
下
三.如何测试?
在 iOS 11 版本中,Apple 引入了一项新功能,可直接在 App Store 中推广您的应用内购买。
首先添加处理程序:
然后在你的 Mac 上写下下面的 URL,然后到你的 iOS 设备上用 .
itms-services://?action=purchaseIntent&bundleId=com.example.app&productIdentifier=product_name
然后你在 () 中的完成块将被触发。
这也可用于测试促销代码兑换,因为 URL 请求会创建待处理事务并将其添加到队列中。确保为您的产品版本删除此代码。
希望这可以帮助!
节点/小火箭/美区ID/国外苹果ID/美区小火箭购买/美区小火箭兑换码/shadowrocket兑换码/苹果商店下载shadowrocket网址
原文链接:我的应用没有响应处理消耗品兑换PromoCodeCodeCode,转载请注明来源!