iOS开发 应用内购买
封面图
•
2025-11-15
•
iOS开发
0
0
0
0
在 iOS 开发中,**应用内购买(In-App Purchase, IAP)** 是一种常见的功能,用于向用户销售虚拟商品或服务。以下是一个完整的 iOS 应用内购买的开发指南,包括: --- ## 一、基本概念 ### 1. **应用内购买类型** - **消耗型(Consumable)**:一次性购买,如游戏中的金币。 - **非消耗型(Non-consumable)**:永久性购买,如解锁高级功能。 - **订阅型(Subscription)**:按周期付费,如会员服务。 --- ## 二、准备工作 ### 1. 注册 Apple Developer 账号 - 访问 [Apple Developer](https://developer.apple.com/) - 创建 App ID 和证书 ### 2. 在 iTunes Connect 中创建产品 - 登录 [App Store Connect](https://appstoreconnect.apple.com/) - 创建一个新的应用(如果尚未创建) - 进入 **My Apps > [Your App] > In-App Purchases** - 添加新的 IAP 产品,填写名称、描述、价格等信息 --- ## 三、代码实现 ### 1. 导入 StoreKit 框架 ```swift import StoreKit ``` ### 2. 实现 IAP 管理类 ```swift class IAPManager: NSObject, SKProductsRequestDelegate, SKPaymentTransactionObserver { static let shared = IAPManager() private var products: [SKProduct] = [] override init() { super.init() SKPaymentQueue.default().add(self) } func requestProducts() { let productIDs = Set(["com.yourapp.product1", "com.yourapp.product2"]) let request = SKProductsRequest(productIdentifiers: productIDs) request.delegate = self request.start() } // MARK: - SKProductsRequestDelegate func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { self.products = response.products for product in products { print("Product: $\(product.price), Title: \(product.localizedTitle)") } } func request(_ request: SKProductsRequest, didFailWithError error: Error) { print("Failed to load products: $error)") } // MARK: - SKPaymentTransactionObserver func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transaction.transactionState { case .purchased: print("Purchase successful") queue.finishTransaction(transaction) // 处理购买成功逻辑 case .failed: print("Purchase failed") queue.finishTransaction(transaction) case .restored: print("Restored purchase") queue.finishTransaction(transaction) default: break } } } func buyProduct(_ product: SKProduct) { let payment = SKPayment(product: product) SKPaymentQueue.default().add(payment) } } ``` ### 3. 使用 IAP 管理类 ```swift // 在 ViewController 中调用 IAPManager.shared.requestProducts() // 当用户点击购买按钮时 if let product = IAPManager.shared.products.first { IAPManager.shared.buyProduct(product) } ``` --- ## 四、测试 IAP ### 1. 使用沙盒账户测试 - 在 App Store Connect 中创建沙盒测试账户 - 在设备上登录沙盒账户进行测试 ### 2. 注意事项 - 不要使用真实 Apple ID 测试 - 需要关闭“iTunes & App Store”中的“自动下载”设置 - 可以通过 `UserDefaults` 来模拟已购买状态(仅限开发环境) --- ## 五、处理恢复购买 ```swift func restorePurchases() { SKPaymentQueue.default().restoreCompletedTransactions() } ``` 在 `paymentQueue(_:updatedTransactions:)` 中处理 `.restored` 状态。 --- ## 六、常见问题 | 问题 | 解决方法 | |------|----------| | 无法看到产品 | 检查产品是否已发布,是否在沙盒环境中 | | 购买失败 | 检查网络、产品 ID 是否正确、是否使用了正确的账户 | | 无法恢复购买 | 确保在 `paymentQueue(_:updatedTransactions:)` 中处理 `.restored` 状态 | --- ## 七、推荐学习资源 - [Apple官方文档 - In-App Purchase](https://developer.apple.com/in-app-purchase/) - [Ray Wenderlich - In-App Purchase Tutorial](https://www.raywenderlich.com/5860-in-app-purchase-tutorial-for-ios) - [Hacking with Swift - IAP](https://www.hackingwithswift.com/example-code/storekit/how-to-add-in-app-purchases) --- 如果你有具体的 IAP 类型(比如订阅),或者想了解如何实现“验证购买”、“服务器端验证”等进阶内容,也可以告诉我,我可以进一步为你讲解。
上一篇:
iOS开发 定位操作
下一篇:
iOS开发 故事板(Storyboards)
标题录入,一次不能超过6条
留言
评论