我是不是必须验证每个 SKPaymentTransaction 订阅的收据?
Posted
技术标签:
【中文标题】我是不是必须验证每个 SKPaymentTransaction 订阅的收据?【英文标题】:Do I have to verify the receipt for every SKPaymentTransaction for subscriptions?我是否必须验证每个 SKPaymentTransaction 订阅的收据? 【发布时间】:2021-02-15 16:21:31 【问题描述】:我正在我的 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】:对于订阅,您只需为所有交易拨打 1 次电话。重要的是您正在验证收据上的权利。因此,只要您的服务器正在查看整个收据,您就应该没问题。
对于其他 IAP 类型,在为每个更新的交易进行验证之后。
【讨论】:
以上是关于我是不是必须验证每个 SKPaymentTransaction 订阅的收据?的主要内容,如果未能解决你的问题,请参考以下文章
如果我使用 jQuery 验证,是不是必须使用 DataAnnotations?
IIS 是不是进行 SSL 证书检查,还是我必须对其进行验证?
Amazon Cognito:验证用户后,是不是必须提示他们登录?