iOS可再生订阅expires_date字段

Lve*_*gos 10 subscription in-app-purchase auto-renewing

在验证可更新订阅收据时,我试图获取最新收据的到期日期.

根据收据字段中的apple文档,"expires_date"字段应包含一个数字,该数字是自1970年1月1日00:00:00 GMT以来的毫秒数.(https://developer.apple.com/library/ios /releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html#//apple_ref/doc/uid/TP40010573-CH106-SW1)

当我获取字段但是我收到一个带有来自"expires_date"字段的格式化日期的字符串.还有一个名为"expires_date_ms"的字段似乎提供了正确的数据.Apple声明"以下未记录的密钥保留供Apple使用,必须由您的应用程序忽略."

这是我收据的一个例子:

{"quantity":"1", 
 "product_id":"com.testapp.test",
 "transaction_id":"1000000135676121", 
 "original_transaction_id":"1000000135134855", 
 "purchase_date":"2014-12-15 06:53:54 Etc/GMT",  
 "purchase_date_ms":"1418626434059", 
 "purchase_date_pst":"2014-12-14 22:53:54 America/Los_Angeles",  
 "original_purchase_date":"2014-12-15 06:51:12 Etc/GMT",  
 "original_purchase_date_ms":"1418626272000",  
 "original_purchase_date_pst":"2014-12-14 22:51:12 America/Los_Angeles",  
 "expires_date":"2014-12-15 06:56:10 Etc/GMT",  
 "expires_date_ms":"1418626570000",  
 "expires_date_pst":"2014-12-14 22:56:10 America/Los_Angeles",  
 "web_order_line_item_id":"1000000028947356",  
 "is_trial_period":"false"
}]
Run Code Online (Sandbox Code Playgroud)

我应该使用哪个字段来获取最佳实践的过期日期?

WEB*_*uju 6

如您所见,此链接上的“ expires_date ” 文档...

https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html#//apple_ref/doc/uid/TP40010573-CH106-SW1

...状态下面未记录的密钥保留供Apple使用,您的应用必须将其忽略。 但是,现在它确实说“ expires_date ”是ASN.1字段值IA5STRING,解释为RFC 3339 date。

看来,截至今天(2015-12-04),在您提出问题的第一年,Apple尚未澄清并正式宣布“ expires_date_ms ”字段,该字段显然具有代表“ expires_date ” 的毫秒数。

您还会发现,收据包含日期的_ms版本和_pst版本。该_pst显然是“PST”或美洲/洛杉矶时区。

receipt":{"receipt_type":"ProductionSandbox", "adam_id":0, "app_item_id":0, "bundle_id":"com.my.cool.app", "application_version":"1.0.3", "download_id":0, "version_external_identifier":0, "receipt_creation_date":"2015-12-04 03:48:00 Etc/GMT", "receipt_creation_date_ms":"1449200880000", "receipt_creation_date_pst":"2015-12-03 19:48:00 America/Los_Angeles", "request_date":"2015-12-04 03:53:45 Etc/GMT", "request_date_ms":"1449201225187", "request_date_pst":"2015-12-03 19:53:45 America/Los_Angeles", "original_purchase_date":"2013-08-01 07:00:00 Etc/GMT", "original_purchase_date_ms":"1375340400000", "original_purchase_date_pst":"2013-08-01 00:00:00 America/Los_Angeles", "original_application_version":"1.0",
"in_app":[
{"quantity":"1", "product_id":"com.my.cool.app.inapppurchase1", "transaction_id":"1000000000000589", "original_transaction_id":"1000000000000589", "purchase_date":"2015-12-03 08:09:32 Etc/GMT", "purchase_date_ms":"1449130172000", "purchase_date_pst":"2015-12-03 00:09:32 America/Los_Angeles", "original_purchase_date":"2015-12-03 08:09:34 Etc/GMT", "original_purchase_date_ms":"1449130174000", "original_purchase_date_pst":"2015-12-03 00:09:34 America/Los_Angeles", "expires_date":"2015-12-03 08:14:32 Etc/GMT", "expires_date_ms":"1449130472000", "expires_date_pst":"2015-12-03 00:14:32 America/Los_Angeles", "web_order_line_item_id":"1000000031087708", "is_trial_period":"false"},
"latest_receipt_info":[
{"quantity":"1", "product_id":"com.my.cool.app.inapppurchase1", "transaction_id":"1000000000000589", "original_transaction_id":"1000000000000589", "purchase_date":"2015-12-03 08:09:32 Etc/GMT", "purchase_date_ms":"1449130172000", "purchase_date_pst":"2015-12-03 00:09:32 America/Los_Angeles", "original_purchase_date":"2015-12-03 08:09:34 Etc/GMT", "original_purchase_date_ms":"1449130174000", "original_purchase_date_pst":"2015-12-03 00:09:34 America/Los_Angeles", "expires_date":"2015-12-03 08:14:32 Etc/GMT", "expires_date_ms":"1449130472000", "expires_date_pst":"2015-12-03 00:14:32 America/Los_Angeles", "web_order_line_item_id":"1000000031087708", "is_trial_period":"false"},
"latest_receipt":"MIItbAYJKoZIhvcNAQcCoIItXTCCLV...truncated...nA=="}
Run Code Online (Sandbox Code Playgroud)

尽管如此,在ios releasenotes更改其措辞或字段列表之前,尽管不明智,但不建议使用_ms和_pst字段。

  • 我们有2019年,`_ms`和`_pst`字段仍然存在并且它们仍未记录在案。此外,Apple文档说expires_date在RFC 3339中是不正确的。 (7认同)