iOS 内购实现:使用 Swift 代码获取产品信息
以下是一个使用 Swift 语言获取 iOS 内购产品的代码示例:
import StoreKit
class ViewController: UIViewController, SKProductsRequestDelegate {
// 内购产品的产品标识符
let productIdentifiers: Set<String> = ['com.example.product1', 'com.example.product2']
// 内购产品的商品数组
var products = [SKProduct]()
override func viewDidLoad() {
super.viewDidLoad()
// 配置内购观察者
SKPaymentQueue.default().add(self)
// 请求内购产品
requestProducts()
}
// 请求内购产品
func requestProducts() {
if SKPaymentQueue.canMakePayments() {
let productRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
productRequest.delegate = self
productRequest.start()
} else {
print("用户禁用了应用内购买功能")
}
}
// 收到内购产品的响应
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
if response.products.count > 0 {
// 获取到内购产品
products = response.products
} else {
print("没有找到内购产品")
}
if response.invalidProductIdentifiers.count > 0 {
print("无效的产品标识符:(response.invalidProductIdentifiers)")
}
}
// 购买内购产品
func purchaseProduct(product: SKProduct) {
let payment = SKPayment(product: product)
SKPaymentQueue.default().add(payment)
}
}
extension ViewController: SKPaymentTransactionObserver {
// 监听内购交易状态
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .purchasing:
print("购买中...")
case .purchased:
// 内购产品购买成功,处理交易
completeTransaction(transaction: transaction)
case .failed:
// 内购产品购买失败,处理交易
failTransaction(transaction: transaction)
case .restored:
// 内购产品恢复购买,处理交易
restoreTransaction(transaction: transaction)
case .deferred:
print("交易延迟处理")
@unknown default:
print("未知状态")
}
}
}
// 处理购买成功的交易
func completeTransaction(transaction: SKPaymentTransaction) {
print("购买成功,交易标识符:(transaction.transactionIdentifier ?? "")")
// 完成交易后,将交易从队列中移除
SKPaymentQueue.default().finishTransaction(transaction)
}
// 处理购买失败的交易
func failTransaction(transaction: SKPaymentTransaction) {
print("购买失败,交易标识符:(transaction.transactionIdentifier ?? "")")
if let error = transaction.error {
print("购买失败错误信息:(error.localizedDescription)")
}
// 处理完失败交易后,将交易从队列中移除
SKPaymentQueue.default().finishTransaction(transaction)
}
// 处理恢复购买的交易
func restoreTransaction(transaction: SKPaymentTransaction) {
print("恢复购买,交易标识符:(transaction.transactionIdentifier ?? "")")
// 处理完恢复购买的交易后,将交易从队列中移除
SKPaymentQueue.default().finishTransaction(transaction)
}
}
在 productIdentifiers 变量中设置你的内购产品的产品标识符。然后,在 viewDidLoad() 方法中调用 requestProducts() 方法来请求内购产品。
在 purchaseProduct 方法中,你可以传入一个 SKProduct 对象来购买内购产品。
在 paymentQueue(_:updatedTransactions:) 方法中,你可以根据交易的状态来处理购买成功、购买失败和恢复购买的交易。
请确保你的项目中已经导入了 StoreKit 框架。
原文地址: https://www.cveoy.top/t/topic/qwEp 著作权归作者所有。请勿转载和采集!