Swift中接入StoreKit-简单实现

2024-08-11  本文已影响0人  小小鸟他大爷

//引入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()

自测可以拉起支付

上一篇 下一篇

猜你喜欢

热点阅读