我已經讓StoreKit能夠支持自動續訂訂閱,並且可以通過沙盒成功購買和續訂訂閱。到現在爲止還挺好。StoreKit - 如何獲取正確的失效日期?
我遇到的問題是蘋果返回的失效日期似乎是錯誤的。
首次購買訂閱時,它會給你一個receipt
響應。在這個響應中,它給出expires_date_formatted
,這是通過查詢receipt
或latest_receipt_info
從蘋果迴應的部分獲得的。
當訂閱過期時,您將收到latest_expired_receipt_info
響應(這不會在正常購買時出現,並且僅在收據已過期時纔會顯示)。
無論出於何種原因,latest_expired_receipt_info
在expires_date_formatted
以內存儲了不同的日期,並導致我各種頭痛。
通常我的應用程序會報告訂閱已過期,但當您嘗試重新購買訂閱時,它會說訂閱仍處於活動狀態。
這似乎暗示latest_expired_receipt_info
內的日期是準確的,但似乎無法獲得該日期(除非您故意讓訂閱過期)。
實例:
receipt (stored) = {
bid = "myappid.goeshere";
bvrs = "1.0";
"expires_date" = 1321365095905;
"expires_date_formatted" = "2011-11-15 13:51:35 Etc/GMT";
...other stuff....
}
latest_expired_receipt_info = {
bid = "myappid.goeshere";
bvrs = "1.0";
"expires_date" = 1321366860000;
"expires_date_formatted" = "2011-11-15 14:21:00 Etc/GMT";
...other stuff...
}
在上面的例子中,我們可以看到,expires_date_formatted
是完全不同的,一個表示13點51,另一個表示14點21
在其它試驗的差可以從幾分鐘到十幾二十分鐘。
如何獲得正確expires_date_formatted
?
我知道這是舊的,但對於其他任何人...如果您的問題在於您的應用程序過早限制高級功能,而不是向用戶報告正確的過期日期以預先警告它們,那麼如果您使用「狀態」值來確定訂閱是否仍處於活動狀態,則可能會更好。 0 =有效,其他任何=無效。在我的應用程序中,我使用Apple驗證收據並將其緩存,然後使用「狀態」確定該子項是否處於活動狀態,緩存收據始終處於活動狀態,因此我使用到期日期來知道何時啓動新的驗證呼叫 –