Swift中接入StoreKit-简单实现
//引入StoreKit
import StoreKit
//创建PurchaseManager类
class PurchaseManager: NSObject {
//创建PurchaseManager单例
static let shared = PurchaseManager()
// 私有初始化方法防止外部实例化
private override init() {}
func requestProductInfo() {
ifSKPaymentQueue.canMakePayments() {
print("拉支付")
letproductIdentifiers:Set = ["iap100006"]
letrequest =SKProductsRequest(productIdentifiers: productIdentifiers)
request.delegate=PurchaseManager.shared
request.start()
}else{
// 用户禁止了应用内购买
print("用户禁止了应用内购买")
}
}
funcpurchaseProduct(_product:SKProduct) {
letpayment =SKPayment(product: product)
SKPaymentQueue.default().add(payment)
}
}
extension PurchaseManager: SKProductsRequestDelegate {
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
ifletproduct = response.products.first{
// 显示产品信息,准备购买流程
print("产品标题: \(product.localizedTitle)")
print("产品描述: \(product.localizedDescription)")
print("产品价格: \(product.price)")
// 在这里可以将产品信息展示给用户,并触发购买流程
// 例如显示在UI上,或者直接调用购买方法
purchaseProduct(product)
}else{
// 未找到产品信息
print("未找到产品信息")
}
}
}
extension PurchaseManager: SKPaymentTransactionObserver {
funcpaymentQueue(_queue:SKPaymentQueue,updatedTransactionstransactions: [SKPaymentTransaction]) {
fortransactionintransactions {
switchtransaction.transactionState{
case.purchased:
// 处理购买成功
print("购买成功")
SKPaymentQueue.default().finishTransaction(transaction)
case.failed:
// 处理购买失败
ifleterror = transaction.error{
print("购买失败: \(error.localizedDescription)")
}
SKPaymentQueue.default().finishTransaction(transaction)
case.restored:
// 处理已恢复购买
print("已恢复购买")
SKPaymentQueue.default().finishTransaction(transaction)
case.deferred, .purchasing:
// 处理购买中或者等待用户确认购买
print("购买中...")
@unknown default:
fatalError("未知状态")
}
}
// 添加观察者
func addPaymentObserver() {
SKPaymentQueue.default().add(self)
}
// 移除观察者
func removePaymentObserver() {
SKPaymentQueue.default().remove(self)
}
}
// 添加观察者
func addPaymentObserver() {
SKPaymentQueue.default().add(self)
}
// 移除观察者
func removePaymentObserver() {
SKPaymentQueue.default().remove(self)
}
}
使用
PurchaseManager.shared.requestProductInfo()
自测可以拉起支付