2011-11-15 17 views
3

我已經讓StoreKit能夠支持自動續訂訂閱,並且可以通過沙盒成功購買和續訂訂閱。到現在爲止還挺好。StoreKit - 如何獲取正確的失效日期?

我遇到的問題是蘋果返回的失效日期似乎是錯誤的。

首次購買訂閱時,它會給你一個receipt響應。在這個響應中,它給出expires_date_formatted,這是通過查詢receiptlatest_receipt_info從蘋果迴應的部分獲得的。

當訂閱過期時,您將收到latest_expired_receipt_info響應(這不會在正常購買時出現,並且僅在收據已過期時纔會顯示)。

無論出於何種原因,latest_expired_receipt_infoexpires_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

我知道這是舊的,但對於其他任何人...如果您的問題在於您的應用程序過早限制高級功能,而不是向用戶報告正確的過期日期以預先警告它們,那麼如果您使用「狀態」值來確定訂閱是否仍處於活動狀態,則可能會更好。 0 =有效,其他任何=無效。在我的應用程序中,我使用Apple驗證收據並將其緩存,然後使用「狀態」確定該子項是否處於活動狀態,緩存收據始終處於活動狀態,因此我使用到期日期來知道何時啓動新的驗證呼叫 –

回答

3

您正在沙箱模式下進行測試,而不是在生產模式下進行測試。

在這種情況下,訂閱時間要短得多:7天的訂閱只有5分鐘,1年的訂閱在一小時後過期。

+0

這是否真的回答了這個問題?我現在正在研究這個問題,如果訂閱時間爲5分鐘或7天,則無關緊要。「收據」報告早期失效日期,因此應用程序會告訴您您的訂閱已過期運行。我得到和海報一樣的行爲,應用說它已經過期,但是當我嘗試再次購買時,iOS告訴我訂閱仍然是活動的 –

+0

謝謝您的回答! –