我在我的应用程序中提供了一个订阅,购买后,我根据收据验证该交易以获取其到期日期。我这样做是通过从磁盘加载收据,将其发送给Apple进行验证/解密(我知道这是不好的做法),然后遍历JSON响应中的latest_receipt_info
来寻找与{{1 }} {}}。
这适用于大多数订阅,但不适用于提供免费试用/介绍性报价的订阅。请在下面查看我的示例:
transactionIdentifier
的{{1}}和SKPaymentTransction
的{{1}}返回到我的应用程序。 transactionIdentifier
是1000000506350685
,originalTransaction.transactionIdentifier
也是如此。 因此,我无法验证购买。
免费购买订阅时没有任何问题。返回的收据中没有与返回给我的应用程序的交易ID相匹配的其他对象。
这是在沙盒环境中,我不确定生产中的行为。
有人有过类似的经历吗?我该怎么做才能解决此问题?
答案 0 :(得分:0)
我认为这可能是由于您之前已经在Sandbox中购买了该产品,并且在您购买之前,沙盒中没有设备收据(与生产不同)。
无论哪种方式,您都应该查看收据中的最新product_id
和expiration_date
,以验证订阅是否处于活动状态。如果您将交易ID保存在数据库中,则交易ID可以作为交易的键,但不应用于验证购买。
这是一篇非常不错的博客文章,内容涉及您的应用内购买服务器为验证并保持订阅状态为最新状态而应该做的事情:iOS Subscriptions are Hard
我这样做是通过从磁盘加载收据,然后将其发送给Apple 验证/解密(我知道这是不好的做法)。
这实际上是Apple的recommended approach。