//引入StoreKit
import?StoreKit
//創(chuàng)建PurchaseManager類
class PurchaseManager: NSObject {
//創(chuàng)建PurchaseManager單例
? ? static let shared = PurchaseManager()
?? ? ? // 私有初始化方法防止外部實(shí)例化
? ? private override init() {}
?? func requestProductInfo() {
?? ? ? ? ? ifSKPaymentQueue.canMakePayments() {
?? ? ? ? ? ? ? print("拉支付")
?? ? ? ? ? ? ? letproductIdentifiers:Set = ["iap100006"]
?? ? ? ? ? ? ? letrequest =SKProductsRequest(productIdentifiers: productIdentifiers)
?? ? ? ? ? ? ? request.delegate=PurchaseManager.shared
?? ? ? ? ? ? ? request.start()
?? ? ? ? ? }else{
?? ? ? ? ? ? ? // 用戶禁止了應(yīng)用內(nèi)購(gòu)買
?? ? ? ? ? ? ? print("用戶禁止了應(yīng)用內(nèi)購(gòu)買")
?? ? ? ? ? }
?? ? ? }
? ? 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{
? ? ? ? ? ? // 顯示產(chǎn)品信息,準(zhǔn)備購(gòu)買流程
? ? ? ? ? ? print("產(chǎn)品標(biāo)題: \(product.localizedTitle)")
? ? ? ? ? ? print("產(chǎn)品描述: \(product.localizedDescription)")
? ? ? ? ? ? print("產(chǎn)品價(jià)格: \(product.price)")
? ? ? ? ? ? // 在這里可以將產(chǎn)品信息展示給用戶镰官,并觸發(fā)購(gòu)買流程
? ? ? ? ? ? // 例如顯示在UI上,或者直接調(diào)用購(gòu)買方法
? ? ? ? ? ? purchaseProduct(product)
? ? ? ? }else{
? ? ? ? ? ? // 未找到產(chǎn)品信息
? ? ? ? ? ? print("未找到產(chǎn)品信息")
? ? ? ? }
? ? }
}
extension PurchaseManager: SKPaymentTransactionObserver {
? ? funcpaymentQueue(_queue:SKPaymentQueue,updatedTransactionstransactions: [SKPaymentTransaction]) {
? ? ? ? fortransactionintransactions {
? ? ? ? ? ? switchtransaction.transactionState{
? ? ? ? ? ? case.purchased:
? ? ? ? ? ? ? ? // 處理購(gòu)買成功
? ? ? ? ? ? ? ? print("購(gòu)買成功")
? ? ? ? ? ? ? ? SKPaymentQueue.default().finishTransaction(transaction)
? ? ? ? ? ? case.failed:
? ? ? ? ? ? ? ? // 處理購(gòu)買失敗
? ? ? ? ? ? ? ? ifleterror = transaction.error{
? ? ? ? ? ? ? ? ? ? print("購(gòu)買失敗: \(error.localizedDescription)")
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? SKPaymentQueue.default().finishTransaction(transaction)
? ? ? ? ? ? case.restored:
? ? ? ? ? ? ? ? // 處理已恢復(fù)購(gòu)買
? ? ? ? ? ? ? ? print("已恢復(fù)購(gòu)買")
? ? ? ? ? ? ? ? SKPaymentQueue.default().finishTransaction(transaction)
? ? ? ? ? ? case.deferred, .purchasing:
? ? ? ? ? ? ? ? // 處理購(gòu)買中或者等待用戶確認(rèn)購(gòu)買
? ? ? ? ? ? ? ? print("購(gòu)買中...")
? ? ? ? ? ? @unknown default:
? ? ? ? ? ? ? ? fatalError("未知狀態(tài)")
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? // 添加觀察者
? ? ? ? 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()
自測(cè)可以拉起支付