问题描述
我正在我的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:
都只有一次?如果磁盘上的收据数据始终是相同的,那么我每次都将相同的二进制数据发送到服务器,有时可能会很多。
文档链接在答案中非常有用。
解决方法
对于订阅,您只需拨打1个电话即可完成所有交易。重要的是您要验证收据上的权利。因此,只要您的服务器正在查看整个收据,您就应该很好。
对于其他IAP类型,则需要为每个更新的交易进行验证。