Swift 接入苹果内购流程

2024-09-09  本文已影响0人  Travelcolor

在Swift中接入苹果内购(In-App Purchase,IAP)涉及几个关键步骤,从项目的配置到代码的编写,主要流程如下:

1. 创建App Store Connect账户

确保你有一个注册的开发者账号,并在App Store Connect中创建你的应用。

2. 配置App内购项目

  1. 登录 App Store Connect
  2. 选择你的应用,点击左侧菜单中的“功能”。
  3. 滑到“App内购买项目”部分,点击“+”以添加内购项目。
  4. 填写相关的产品信息,如产品ID、类型(消耗品、非消耗品、订阅等)和定价。

3. 在Xcode中配置应用

  1. 打开Xcode项目,确保你已经设置好Bundle Identifier,与App Store Connect中的应用一致。
  2. 在项目的“Signing & Capabilities”标签中,启用“In-App Purchase”功能。

4. 导入StoreKit框架

StoreKit是负责处理苹果内购的框架。你需要导入它来使用内购相关的功能。

import StoreKit

5. 设置产品请求

使用SKProductsRequest获取可购买的产品信息。

class IAPManager: NSObject, SKProductsRequestDelegate {

    static let shared = IAPManager()
    var products: [SKProduct] = []

    func fetchProducts() {
        let productIdentifiers: Set<String> = ["com.yourapp.productid1", "com.yourapp.productid2"]
        let request = SKProductsRequest(productIdentifiers: productIdentifiers)
        request.delegate = self
        request.start()
    }

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

在上面的代码中,productIdentifiers是你在App Store Connect中配置的产品ID集合。

6. 处理购买

当用户点击购买按钮时,调用SKPaymentQueue来处理购买请求。


func purchase(product: SKProduct) {
    if SKPaymentQueue.canMakePayments() {
        let payment = SKPayment(product: product)
        SKPaymentQueue.default().add(payment)
    } else {
        print("User can't make payments")
    }
}

7. 处理交易结果

你需要监听交易的状态来完成购买或处理失败的交易。

class IAPManager: NSObject, SKPaymentTransactionObserver {

    override init() {
        super.init()
        SKPaymentQueue.default().add(self)
    }

    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            switch transaction.transactionState {
            case .purchased:
                print("Transaction successful!")
                // 完成购买后的逻辑
                SKPaymentQueue.default().finishTransaction(transaction)
            case .failed:
                print("Transaction failed!")
                SKPaymentQueue.default().finishTransaction(transaction)
            case .restored:
                print("Transaction restored!")
                SKPaymentQueue.default().finishTransaction(transaction)
            default:
                break
            }
        }
    }
}

8. 恢复购买

如果你有非消耗品或订阅类型的产品,你需要提供“恢复购买”的功能。

func restorePurchases() {
    SKPaymentQueue.default().restoreCompletedTransactions()
}

9. 处理服务器验证

为了确保交易的安全性,通常需要将交易信息发送到自己的服务器进行验证,苹果提供了收据验证的机制。

  1. 获取交易收据:

    if let appStoreReceiptURL = Bundle.main.appStoreReceiptURL,
       let receiptData = try? Data(contentsOf: appStoreReceiptURL) {
        let receiptString = receiptData.base64EncodedString(options: [])
        // 将receiptString发送到服务器进行验证
    }
  1. 服务器接收并验证收据,使用苹果的验证接口

10. 测试购买

  1. 在App Store Connect中,创建一个沙盒测试账号。
  2. 在iOS设备上,使用沙盒账号进行测试购买。

总结

在Swift中接入苹果内购,涉及到多个步骤,从配置App Store Connect到编写内购的逻辑。关键点在于:

上一篇 下一篇

猜你喜欢

热点阅读