iOS中实现应用内购买

1,296 阅读2分钟

1. 创建 App Store 连接和商品

App Store Connect 中,选择您的应用并转到 "In-App Purchases" 部分。在此处,您可以创建不同类型的应用内购买项目,包括非消耗品(一次性购买)、消耗品(可以多次购买)和自动续订订阅。

每个商品都有一个唯一的产品标识符(Product Identifier),在应用内购买过程中会用到。确保您的应用内购买项目的设置正确,并遵循 Apple 的规定。

2. 集成 StoreKit 框架

在 Xcode 中,将 StoreKit 框架添加到您的项目中。这个框架提供了用于管理应用内购买的类和方法。

导入 StoreKit 头文件以使用其功能:

import StoreKit

3. 请求商品信息

使用 SKProductsRequest 请求用户可购买的商品信息。首先,创建一个 SKProductsRequest 实例,并为其设置代理:

let productsRequest = SKProductsRequest(productIdentifiers: Set(["your_product_identifier"]))
productsRequest.delegate = self
productsRequest.start()

然后实现 SKProductsRequestDelegate 的代理方法,以获取商品信息:

func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
    let products = response.products
    for product in products {
        print("Product: \(product.localizedTitle), Price: \(product.price)")
    }
}

4. 发起购买请求

当用户选择购买商品时,使用 SKPaymentQueue 发起购买请求。创建一个 SKPayment 对象并将其添加到支付队列中:

let payment = SKPayment(product: product)
SKPaymentQueue.default().add(payment)

5. 处理购买结果

SKPaymentQueue 的代理方法中,您可以处理购买请求的结果。如果购买成功,您需要为用户提供相应的内容或功能:

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {
        if transaction.transactionState == .purchased {
            // 提供内容或功能,并完成交易
            SKPaymentQueue.default().finishTransaction(transaction)
        } else if transaction.transactionState == .failed {
            // 处理购买失败情况
            SKPaymentQueue.default().finishTransaction(transaction)
        }
    }
}

6. 恢复购买

为了支持跨设备恢复购买,您可以提供 "Restore Purchases" 功能。用户可以通过这个功能恢复之前已购买的项目:

SKPaymentQueue.default().restoreCompletedTransactions()

7. 处理自动续订订阅

如果您提供自动续订订阅,您需要监听 SKPaymentQueue 的相关通知,以处理订阅状态变化:

NotificationCenter.default.addObserver(self, selector: #selector(handleSubscriptionStatus(_:)), name: .storeKitPurchaseNotification, object: nil)

然后在 handleSubscriptionStatus 方法中处理订阅状态变化,更新用户的订阅状态。

文章结束。