我正在尝试验证自动更新的In App购买是否已过期服务器端(不在设备上) .
我正在使用Apple的Grand Unified Receipt(iOS 7风格的交易) . Apple返回的响应包含带有收据数组的 in_app
和 latest_receipt_info
元素 . in_app
JSON元素包含 LESS 收据而不是 latest_receipt_info
. 我期待两个元素包含相同的数字或收据 .
此外,我期待 in_app
元素将包含所有收据 . 但是,似乎 latest_receipt_info
实际上包含所有收据 . Apple文档似乎建议使用 in_app
来查找最新收据 .
我很惊讶看到 latest_receipt_info
因为Apple的Documentation声明这个元素是"Only returned for iOS 6 style transaction receipts for auto-renewable subscriptions."(不是iOS 7) .
我应该迭代哪个JSON元素来查找可自动更新的iOS 7样式事务的最新收据: in_app
或 latest_receipt_info
?
5 回答
只想表明只有
latest_receipt_info
字段才会返回最新续订的收据 . 这是基于我们实际从Apple获得的回报 .相关文档在page 21.
虽然它声明
latest_receipt
和latest_receipt_info
字段是"Only returned for iOS 6 style transaction receipts for auto-renewable subscriptions",但我们发现它们是在我们的iOS 7收据中返回的 .receipt
对象中的in_app
字段也返回了几乎相同的数据,但不包含最新的收据信息,这是您在自动续订时关注的信息 .要验证自动续订订阅是否未过期,请检查
latest_receipt_info
元素 .这是目前(2017-08-09)正式记录在
in_app
和latest_receipt_info
元素上的内容:in_app
(source)
latest_receipt_info
(source)
This是关于此问题的最新和最清晰的讨论 . 希望这可以帮助 .
Babken Vardanyan在多个回答帖子中提到有时会丢失latest_receipt_info . 我在这个帖子https://forums.developer.apple.com/thread/92200中的收据中看到的一个有趣的事情是latest_receipt_info与in_app的区别 . 做差异时,我注意到链中的第一个收据丢失了(包含is_trial_period = true) . 它没有生成相应的应用内收据 .
如文档中所链接:https://developer.apple.com/library/archive/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW4表示使用latest_receipt_info作为"for iOS 7 style app receipts, the value of this key is an array containing all in-app purchase transactions."
关于订阅,您不应使用in_app并仅使用latest_receipt_info .
https://www.revenuecat.com/2018/09/24/apple-subscription-notifications-are-almost-useless涵盖了像cancellation_date这样的边缘案例,它是一个客户服务提供的取消,就像在这个苹果开发者论坛帖子中看到的那样:https://forums.developer.apple.com/thread/96670
Receipt Fields(Apple Docs)
上面的文档很清楚使用
in_app
. 请注意文档中的"Keys not documented below are reserved for use by Apple and must be ignored by your app"行 . 因此,即使解码后的收据有latest_receipt_info
,我们也应该忽略它 .但我同意,文档非常缺乏,这让我很紧张 . 让我知道您在 生产环境 中使用iOS 7样式收据验证的体验 .