iOS内购二:购买和恢复

iOS内购二:购买和恢复

购买

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

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

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

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 而言,最佳做法是只创建一个群组,这样可以防止用户意外购买多个订阅。

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

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

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

其它可参考项:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值