Продлеваемая подписка iOS поле expires_date

При проверке возобновляемой квитанции о подписке я пытаюсь получить дату истечения срока действия последней квитанции.

В соответствии с документацией Apple в полях квитанций поле «expires_date» должно содержать число, которое представляет собой количество миллисекунд с 1 января 1970 года, 00:00:00 по Гринвичу (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"
}]

Какое поле следует использовать для получения даты истечения срока действия с учетом передового опыта?


person Lvergos    schedule 15.12.2014    source источник
comment
Я только что отправил отчет об ошибке в Apple по этому поводу. Что вы в итоге использовали в производстве?   -  person Moritz    schedule 06.08.2015


Ответы (1)


Как вы обнаружили, документация для "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.

Похоже, что на сегодняшний день (2015-12-04), спустя год после вашего вопроса, Apple еще не уточнила и не сделала официальным поле «expires_date_ms», в котором явно указаны миллисекунды, представляющий "expires_date".

Как вы также обнаружите, квитанция содержит версию дат _ms и версию _pst. _pst явно указывает на "PST" или часовой пояс America/Los_Angeles.

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, как бы это ни было позорно.

person WEBjuju    schedule 04.12.2015
comment
У нас есть 2019 год, поля _ms и _pst все еще там, и они все еще недокументированы. Более того, документы Apple говорят, что expires_date находится в RFC 3339, что не соответствует действительности. - person Tupteq; 08.03.2019