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 而言,最佳做法是只创建一个群组,这样可以防止用户意外购买多个订阅。
升级。用户购买服务级别高于当前订阅的订阅。他们的订阅服务会立即升级,并会获得原始订阅的按比例退款。如果您希望用户能够立即访问更多内容或功能,请为该订阅指定较高排名,将其作为升级选项。
降级。用户选择服务级别低于当前订阅的订阅。订阅会继续保持不变,直到下一个续订日期,然后以较低级别和价格续订。
跨级。用户切换到相同级别的新订阅。如果两个订阅的持续时间相同,新订阅会立即生效。如果持续时间不同,新订阅会在下一个续订日期生效。
其它可参考项: