StoreKit - 如何获得正确的到期日期?

Posted

技术标签:

【中文标题】StoreKit - 如何获得正确的到期日期?【英文标题】:StoreKit - How to get the correct expiry date? 【发布时间】:2011-12-29 14:26:19 【问题描述】:

我已让 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 = 活动,其他 = 不活动。在我的应用程序中,我使用 Apple 验证收据然后将其缓存,我使用“状态”来确定子是否处于活动状态,缓存的收据将始终处于活动状态,因此我使用到期日期来知道何时启动新的验证呼叫 【参考方案1】:

您正在沙盒模式下进行测试,而不是在生产模式下。

在这种情况下,订阅时间要短得多:7 天订阅只需 5 分钟,而 1 年订阅在一小时后到期。

【讨论】:

这真的回答了这个问题吗?我现在正在研究这个问题,订阅是 5 分钟还是 7 天并不重要..“收据”报告更早的到期日期,因此该应用程序会告诉您您的订阅已过期当它仍然跑步。我得到与海报相同的行为,应用程序说它已过期,但当我再次尝试购买时,ios 告诉我订阅仍然有效

以上是关于StoreKit - 如何获得正确的到期日期?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Yesod 正确处理 JWT 的到期日期?

如何计算3个月前的到期日期将到期

如何拦截 StoreKit“购买对话框”以使 MBProgressHUD / UIProgressView 在正确的时间正确显示?

定期付款和 Paypal 后更新到期日期

找到即将到期的日期并根据它分配值 - Python数据框

如何获得MONTHS,DAYS和周(android datepicker)