我们的iOS应用程序使用应用内购买,包括一次性订阅和自动续订订阅 . 这两种都是非消耗品 .
iOS提供了两个API:refresh receipt和restore completed transactions .
似乎后者适用于所有情况,而前者仅适用于某些情况 . 具体来说,当我们将自动更新购买恢复到新设备时,恢复购买的交易将导致将来续订生成将在后台发送到新设备的交易,其中刷新收据不会导致交易下次续订时发送到此设备 .
鉴于此,有没有理由使用刷新收据?
Apple似乎说我们可以使用:
通过使用SKReceiptRefreshRequest类刷新应用收据或使用SKPaymentQueue类的restoreCompletedTransactions方法恢复已完成的事务来检索有关过去购买的信息 .
2 回答
你需要阅读这篇Restoring Purchased Products以了解2之间的目的 .
从iOS 7开始,从商店下载的每个应用程序都有一个收据(用于下载/购买应用程序),位于
appStoreReceiptURL
. 当用户通过In App Purchase购买商品时,appStoreReceiptURL
上的内容会根据购买信息进行更新 . 大多数情况下,您只需刷新收据(在appStoreReceiptURL
),以便了解用户所做的交易 .有关收据的更多信息,来自WWDC 2017,StoreKit Session 中的新功能https://developer.apple.com/videos/play/wwdc2017/303/
您还可以观看WWDC 2017,会话高级StoreKit了解更多详情https://developer.apple.com/videos/play/wwdc2017/305/
Edit :我最初的答案是解释恢复和刷新之间的区别,这并没有回答原始问题 . 对于任何有兴趣阅读的人,请查看StackOverflow answer获取更多信息 .
回答你的问题:是否有理由使用刷新收据?
是 . 您的典型流程是用户在新设备上安装您的应用程序和 restoring the purchases once . 在这个时刻,您拥有处理该过程所需的所有信息 . 在提示用户凭据时通常由用户启动的进程:
At a later point in time you would refresh the receipt 获取您提供的自动续订订阅的最新相关信息,例如:
订阅到期意图
订阅重试标记
订购试用期
取消日期
取消原因
......
有关这些字段的详细信息,请参阅Receipt Fields文档 .
有用的链接
Receipt Fields
In-App Purchase Programming Guide(恢复购买的产品)