iOS内购二:购买和恢复

2025-12-10 06:09:57 活动专题

iOS内购二:购买和恢复

购买

构建一个SKPayment对象,传递SKProduct。SKPayment被创建后,就会将其加入到SKPaymentQueue队列中

然后用户会授权,payment是异步,所以需要一个observer,apple建议observer添加都的AppDelegate中

支付之后,app store会返回一个transaction,transaction包含receipt(被加密签名,可以获取购买的信息)和 state 最后,还需要让apple知道你已经完成处理这个transaction,如果不这么做的话,apple会一致给你发送这个transaction

如下所示,在AppDelegate中添加观察者:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

SKPaymentQueue.default().add(self)

return true

}

实现SKPaymentTransactionObserver中的方法,监听状态

extension AppDelegate: SKPaymentTransactionObserver {

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {

for transaction in transactions {

switch transaction.transactionState {

case .purchased:

completeTransaction(transaction)

case .failed:

failedTransaction(transaction)

default:

print("Unhandled transaction state")

}

}

}

恢复

如果用户在一个新设备上登录,希望要恢复原来的购买项目 需要记住的是,不是所有的都可以恢复,Consumable 和 Non-Renewing Subscriptions 是不能恢复的 恢复,需要调用pagyment queue的restoreCompletedTransactions()。恢复purchase会为旧的transaction创建新的transaction

//恢复购买

public func restorePurchases() {

SKPaymentQueue.default().restoreCompletedTransactions()

}

extension AppDelegate: SKPaymentTransactionObserver {

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {

for transaction in transactions {

switch transaction.transactionState {

case .purchased, .restored: //购买 or 恢复

completeTransaction(transaction)

case .failed:

failedTransaction(transaction)

default:

print("Unhandled transaction state")

}

}

}

non-renewing subscription

非续期订阅需要管理期限,当其过期后,需要手动再续期。iTunes并不管理,需要自己管理 可使用iCloud来管理,但如果app是跨平台的,使用iCloud并不是一个好的选择,iCloud限制在iOS设备上

auto-renewable subscription

自动续期订阅与非自动续期订阅非常类似,但也有一些区别 1.首先需要创建subscription group

可参考官方文档:自动续期订阅

您提供的每个订阅都必须分配到一个订阅群组。一个订阅群组包含多个具有不同访问级别、价格和持续时间的订阅,便于用户选择最符合自己需求的选项。由于用户从一个群组中一次只能购买一个订阅,因此对于大多数 app 而言,最佳做法是只创建一个群组,这样可以防止用户意外购买多个订阅。

升级。用户购买服务级别高于当前订阅的订阅。他们的订阅服务会立即升级,并会获得原始订阅的按比例退款。如果您希望用户能够立即访问更多内容或功能,请为该订阅指定较高排名,将其作为升级选项。

降级。用户选择服务级别低于当前订阅的订阅。订阅会继续保持不变,直到下一个续订日期,然后以较低级别和价格续订。

跨级。用户切换到相同级别的新订阅。如果两个订阅的持续时间相同,新订阅会立即生效。如果持续时间不同,新订阅会在下一个续订日期生效。

其它可参考项:

In-App Purchase Tutorial: Auto-Renewable SubscriptionsAPP store connect :自动续期订阅群组设置概述恢复购买iOS内购(IAP)自动续订订阅类型总结