关于在app store上处理iAP成功的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于在app store上处理iAP成功的问题相关的知识,希望对你有一定的参考价值。
如果用户在iAP进程启动之前没有付款信息应用程序会将用户重定向到应用程序商店以获取用户填写的付款信息,并且当用户已经完成并且付款完成时(获取警报购买成功)钱被切断,app store没有将用户重定向回应用程序,如果用户回到应用程序注意到了。
SKPaymentTransactionObserver没有调用,用户没有获得任何消耗品(应用程序中的信用)
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .deferred:
print("transactionState = deferred")
case .purchasing:
print("transactionState = purchasing")
case .purchased:
print("transactionState = purchased")
SKPaymentQueue.default().finishTransaction(transaction)
SKPaymentQueue.default().remove(self)
var receiptBase: String = ""
if let receiptURL = Bundle.main.appStoreReceiptURL {
do {
let receipt = try Data(contentsOf: receiptURL)
let base64encodedReceipt = receipt.base64EncodedString()
receiptBase = base64encodedReceipt
} catch {
receiptBase = ""
}
}
//call api for add consumable to user
buyCreditDelegate?.purchasedCredit(transactionId: transaction.transactionIdentifier ?? "", receiptId: receiptBase)
case .failed:
SKPaymentQueue.default().finishTransaction(transaction)
SKPaymentQueue.default().remove(self)
if let delegate = self.buyCreditDelegate {
delegate.cancelPurchases()
}
case .restored:
print("transactionState = restored")
}
仅供参考:我的iAP是消耗品。
我怎么能解决它并抱歉我的英语不好
答案
整个删除此行:
SKPaymentQueue.default().remove(self)
你需要你的观察者成为一个永久的持久对象,比如app delegate。切勿将其取下或商店无法与您交谈。
另一答案
你可以实现:
func paymentQueue(_ queue: SKPaymentQueue, shouldAddStorePayment payment: SKPayment, for product: SKProduct) -> Bool {
}
更多关于Apple的信息
当用户在App Store中启动应用内购买时,将调用此委托方法,并在您的应用中继续进行交易。具体来说,如果您的应用已安装,则会自动调用该方法。
如果用户在App Store中启动应用内购买时尚未安装您的应用,则用户会在应用安装完成后收到通知。当用户点击通知时调用此方法。否则,如果用户手动打开应用程序,则仅在购买开始后不久打开应用程序时才会调用此方法。
以上是关于关于在app store上处理iAP成功的问题的主要内容,如果未能解决你的问题,请参考以下文章
您可以在提交应用程序或相关 IAP 之前使用 App Store 沙盒测试(特别是verifyReceipt)吗?
在 Apple 的 App Store 之外分发时,我可以使用 In-App-Purchases 吗?