gpt4 book ai didi

ios - 在“应用程序购买”中-检测用户是否已经进行了购买

转载 作者:行者123 更新时间:2023-12-01 16:07:18 24 4
gpt4 key购买 nike

我有以下代码可以进行应用内购买。一切正常,用户单击按钮即可购买(非消耗品)。

目前,我在AppDelegate内调用getProducts()restorePurchases()-当用户已经购买商品时,我假设将使用restorePurchases()来获取该商品-我如何检测是否已购买具有其ID的特定产品至f。隐藏该按钮。

import Foundation
import StoreKit

class IAPService: NSObject {

private override init() {}
static let shared = IAPService()
var products = [SKProduct]()
let paymentQueue = SKPaymentQueue.default()
private var purchasedProductIdentifiers: Set<String> = []

func getProducts() {
let product: Set = ["123456"]
let request = SKProductsRequest(productIdentifiers: product)
request.delegate = self
request.start()
paymentQueue.add(self)
}

func purchase() {
guard let productToPurchase = products.first else { return }
print(productToPurchase)
let payment = SKPayment(product: productToPurchase)
paymentQueue.add(payment)
}

func restorePurchases() {
paymentQueue.restoreCompletedTransactions()
}

}

extension IAPService: SKProductsRequestDelegate {

func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
self.products = response.products
for product in response.products {
print(product.localizedTitle)
}
}

}

extension IAPService: SKPaymentTransactionObserver {

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
print(transaction.transactionState.status(), transaction.payment.productIdentifier)
switch transaction.transactionState {
case .purchasing: break
default: queue.finishTransaction(transaction)
}
}
}

}

extension SKPaymentTransactionState {
func status() -> String {
switch self {
case .deferred: return "deferred"
case .failed: return "failed"
case .purchased: return "purchased"
case .purchasing: return "purchasing"
case .restored: return "restored"
}
}
}

最佳答案

您需要检查updatedTransactions的回调以获取所需的productIdentifier,并且其状态为purchased / restored

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
if transaction.payment.productIdentifier == "someId" && ( transaction.transactionState == .purchased || transaction.transactionState == .restored ) {
// purchased / resorted
}
}
}

有用的链接

https://www.raywenderlich.com/5456-in-app-purchase-tutorial-getting-started

in-app purchase in Swift with a single product

关于ios - 在“应用程序购买”中-检测用户是否已经进行了购买,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56724752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com