【问题标题】:iOS renewable subscription expires_date fieldiOS 更新订阅 expires_date 字段
【发布时间】:2015-02-13 06:30:47
【问题描述】:

更新:

我在这里发布@vitro 的评论:

2021 年 - 它就在那里:https://developer.apple.com/documentation/appstorereceipts/expires_date_ms 此字段在 JSON 响应中返回,在 responseBody.Latest_receipt_info 和 responseBody.Receipt.In_app 数组中。
订阅到期或续订的时间,采用 UNIX 纪元时间格式,以毫秒为单位。使用此时间格式处理日期。

谢谢@vitro


原帖:

在验证可续订的订阅收据时,我正在尝试获取最新收据的到期日期。

根据有关收据字段的苹果文档,“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"
}]

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

【问题讨论】:

  • 我刚刚向 Apple 提交了一份关于此问题的错误报告。你最终在生产中使用了什么?

标签: in-app-purchase subscription auto-renewing


【解决方案1】:

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

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

...states 下面未记录的密钥仅供 Apple 使用,您的应用必须忽略。 但是现在它确实说“expires_date”是ASN.1 字段值 IA5STRING,解释为 RFC 3339 日期

看来,截至今天(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=="}

尽管如此,在 ios 发行说明更改其措辞或字段列表之前,无论多么可耻,不建议使用 _ms_pst 字段。

【讨论】:

  • 我们有 2019 年,_ms_pst 字段仍然存在并且它们仍然没有记录。此外,Apple 文档说 expires_date 在 RFC 3339 中,这是不正确的。
  • 2021 年 - 它就在那里:developer.apple.com/documentation/appstorereceipts/…This field is returned in the JSON response, in the responseBody.Latest_receipt_info and responseBody.Receipt.In_app arrays. The time a subscription expires or when it will renew, in UNIX epoch time format, in milliseconds. Use this time format for processing dates.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 2013-01-06
  • 2016-03-25
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
相关资源
最近更新 更多