我是否必须验证每个 SKPaymentTransaction 订阅的收据?

Tom*_*ing 6 storekit ios receipt-validation skpaymenttransaction

我正在我的 iOS 应用程序中实现自动续订订阅。我的事务处理看起来像这样的伪代码:

func paymentQueue(_queue: SKPaymentQueue, updatedTransactions transactions:[SKPaymentTransaction]) {
  for (t in transactions) {
    let data = Data(contentsOf: getReceiptUrl())

    //this is actually async, but for simplicity here it's just a straight return
    if verifyReceiptWithServer(data) == .success {
      print("Verified receipt successfully!")
    }
    queue.finishTransaction(t)
  }
}
Run Code Online (Sandbox Code Playgroud)

如果订阅在我的应用程序未处于活动状态时续订多次,则我可以在此处为每个产品获得不止一笔交易。有时,应用程序还会在重新安装时立即获取大量旧交易。我需要验证每笔交易吗?还是每人只做一个更好productIdentifier?或者甚至可能每次调用一次paymentQueue:updatedTransactions:?如果磁盘上的收据数据始终相同,那么我每次都会向服务器发送相同的二进制数据,有时可能会很多。

答案中的文档链接值得赞赏。

小智 1

对于订阅,您只需拨打 1 次电话即可完成所有交易。重要的是您要验证收据上的权利。因此,只要您的服务器查看整个收据,您就应该没问题。

对于其他 IAP 类型,需要验证每个更新的交易。