我想验证iOS 6和iOS 7的iap收据(非耗材和自动续订订阅)。
由于我使用服务器来遵循iOS 6的最佳做法,我也想将它用于iOS 7(主要用于订阅)。 这是一个报刊杂志的应用程序,所以我在我的服务器上保留收据,我想检查哪些收据包含有效订阅,以便我可以向这些用户发送推送通知,以便后续下载下一期。 对于iOS 6,一切正常,但在iOS 7中存在很多混乱。
在receipt validation documentation中,它表示要验证自动续订订阅收据,我们会发送带有共享密钥的JSON对象,然后我们会收到具有特定状态的响应。
这适用于iOS 7吗?这对我来说不是很清楚。
iOS 7收据的状态是指应用程序收据本身(而非应用程序购买中的特定应用程序)。那么如果我必须检查应用收据中的每个iap条目(例如,将iap到期日期与当前日期进行比较),我是否必须在我的服务器上实现应用收据解析?
还有办法通知我要检查的具体购买吗? 我猜不是。
我是否必须使用我的服务器进行iOS 6和iOS 7的设备验证?如果是,怎么样? :S
答案 0 :(得分:13)
对于iOS7,您不会向服务器发送SKPaymentTransaction
的{{1}},而是发送应用收据(在base64编码之后就像transactionReceipt
一样)。
您可以尝试在此answer中运行实现,以了解如何发送它以及查看从App Store返回的JSON响应的结构。
JSON响应有一个transactionReceipt
字段,其中包含用户已提出的应用内购买列表以及有关其过期的信息,例如:
“latest_receipt_info”:({
“量”: “1”,
“PRODUCT_ID”: “com.example.subscription_30”,
“TRANSACTION_ID”: “1000000097606958”,
“original_transaction_id”: “1000000097606821”,
“purchase_date”:“2014-01-01 13:22:25 Etc / GMT”,
“purchase_date_ms”: “1388582545000”,
“purchase_date_pst”:“2014-01-01 05:22:25 America / Los_Angeles”,
“original_purchase_date”:“2014-01-01 11:10:40 Etc / GMT”,
“original_purchase_date_ms”: “1388574640000”,
“original_purchase_date_pst”:“2014-01-01 03:10:40 America / Los_Angeles”,
“expires_date”:“2014-01-01 11:14:35 Etc / GMT”,
“expires_date_ms”: “1388574875000”,
“expires_date_pst”:“2014-01-01 03:14:35 America / Los_Angeles”,
“web_order_line_item_id”: “1000000027707568”},
...)
JSON响应还包含一个latest_receipt_info
字段,其中包含您可以存储在服务器上并与Apple存储的iOS6收据一样发送到Apple验证服务器的收据(base64编码)。
看起来您需要手动计算是否有任何有效订阅。也许是这样的(未经测试):
latest_receipt
如果这不起作用并且您需要为iOS7执行本地应用收据验证,则可以查看我的github library以获取自动续订订阅或RMStore。希望这有帮助!