4

我正在使用 MKStoreKit 来处理自动更新订阅。我目前正在测试 1 个月的订阅(在测试中订阅持续 5 分钟)。购买订阅后,我等待它过期。到期后,我会检查订阅是否仍然有效。

[[MKStoreManager sharedManager] isSubscriptionActive:kSubscriptionMonthlyIdentifier]

这会像我期望的那样返回 false。但是,由于它是自动续订的,我希望 MKStoreKit 届时会联系 Apple 以重新验证订阅。也许我使用 MKStoreKit 错误,但根据文档博客文章,它应该很简单:

//App Delegate
[MKStoreManager sharedManager];
//lets me know when the subscription was purchased
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(subscriptionPurchased:) name:kSubscriptionsPurchasedNotification object:nil];    
//lets me know when the subscription expires
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(subscriptionFailed:) name:kSubscriptionsInvalidNotification object:nil];

//In a view with subscription feature
if([[MKStoreManager sharedManager] isSubscriptionActive:kSubscriptionMonthlyIdentifier]){
    //access to subscription feature
}

//Where the user would purchase the subscription
[[MKStoreManager sharedManager] buyFeature:subscriptionId onComplete:^(NSString* purchasedFeature, NSData* receiptData)
{
...
}
 onCancelled:^
{
...
}

我的问题是,当订阅在 Apple 端仍然有效时,为什么 MKStoreKit 不让我知道?

4

1 回答 1

3

文档说:

为了测试,生产环境和测试环境中的自动更新订阅的行为存在一些差异。

续订速度加快,自动续订订阅每天最多续订六次。这使您可以测试您的应用如何处理订阅续订,以及它如何处理失效后的续订,以及它如何处理包含间隙的订阅历史记录。

由于加快了到期和续订率,订阅可能会在系统开始尝试续订订阅之前到期,从而在订阅期间留下一小段时间。由于各种原因,在生产中也可能出现此类失误——确保您的应用程序正确处理它们。

你可以尝试:

  1. 测试更长的订阅周期,让“​​系统”有更多的时间来续订订阅(6mo = 30min, 1y = 1h)?
  2. 运行计时器以继续检查订阅是否在延长时间后续订?
  3. 通过恢复购买来强制续订?

此外,正如此处详述的那样,请确保您在检查之前等待的时间不超过订阅期的六倍,因为订阅每天只能为单个测试帐户续订六次。

我正要开始在我自己的应用程序中实现这个,所以如果我遇到同样的情况我会回信。

更新:

我在某处读到,当应用程序在到期前 24 小时后启动时会发生自动更新。这可能很难在沙盒中复制。也可以通过刷新应用收据 (>= iOS 7) 或重新验证最近购买的收据 (< iOS 7) 来强制续订。

我已经在github上发布了我的实现供您阅读。

于 2013-10-16T23:29:47.477 回答