美文网首页
Swift中接入StoreKit-简单实现

Swift中接入StoreKit-简单实现

作者: 小小鸟他大爷 | 来源:发表于2024-08-11 15:34 被阅读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()

    自测可以拉起支付

    相关文章

      网友评论

          本文标题:Swift中接入StoreKit-简单实现

          本文链接:https://www.haomeiwen.com/subject/lyqrkjtx.html