5

我正在我的 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)
  }
}

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

文档链接在答案中表示赞赏。

4

1 回答 1

1

对于订阅,您只需为所有交易拨打 1 次电话。重要的是您正在验证收据上的权利。因此,只要您的服务器正在查看整个收据,您就应该很好。

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

于 2020-11-16T11:06:52.477 回答