在Swift中接入苹果内购(In-App Purchase,IAP)涉及几个关键步骤,从项目的配置到代码的编写,主要流程如下:
1. 创建App Store Connect账户
确保你有一个注册的开发者账号,并在App Store Connect中创建你的应用。
2. 配置App内购项目
- 登录 App Store Connect。
- 选择你的应用,点击左侧菜单中的“功能”。
- 滑到“App内购买项目”部分,点击“+”以添加内购项目。
- 填写相关的产品信息,如产品ID、类型(消耗品、非消耗品、订阅等)和定价。
3. 在Xcode中配置应用
- 打开Xcode项目,确保你已经设置好Bundle Identifier,与App Store Connect中的应用一致。
- 在项目的“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. 处理服务器验证
为了确保交易的安全性,通常需要将交易信息发送到自己的服务器进行验证,苹果提供了收据验证的机制。
- 获取交易收据:
if let appStoreReceiptURL = Bundle.main.appStoreReceiptURL,
let receiptData = try? Data(contentsOf: appStoreReceiptURL) {
let receiptString = receiptData.base64EncodedString(options: [])
// 将receiptString发送到服务器进行验证
}
- 服务器接收并验证收据,使用苹果的验证接口。
10. 测试购买
- 在App Store Connect中,创建一个沙盒测试账号。
- 在iOS设备上,使用沙盒账号进行测试购买。
总结
在Swift中接入苹果内购,涉及到多个步骤,从配置App Store Connect到编写内购的逻辑。关键点在于:
- 配置好内购项目和Xcode中的相关设置;
- 使用
SKProductsRequest
获取产品信息; - 使用
SKPaymentQueue
处理购买交易; - 通过沙盒测试账号进行测试。