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()


自测可以拉起支付

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内购 一. 内购的简介 何谓内购在iOS的App中, 如果你要购买某件商品, 使用苹果的支付方式进行购买, 即为内...
    面糊阅读 1,580评论 2 51
  • iOS支付 iOS支付分为两类,第三方支付和应用内支付(内购)。 第三方支付包括:支付宝支付、微信支付、银联支付、...
    羊驼先生丶阅读 917评论 0 0
  • iOS支付 iOS支付分为两类,第三方支付和应用内支付(内购)。 第三方支付包括:支付宝支付、微信支付、银联支付、...
    帅不过oneS阅读 2,913评论 2 8
  • 我在点击购买的时候突然断网了,这个时候并没有返回成功,但是我在连上网络后,并不会在走代理方法,只有当进程杀死后,然...
    90后的思维阅读 1,211评论 0 5
  • iOS支付 iOS支付分为两类,第三方支付和应用内支付(内购)。 第三方支付包括:支付宝支付、微信支付、银联支付、...
    请输入账号名阅读 6,271评论 3 22