MKStoreKit autorenewable订阅

时间:2012-09-14 19:43:43

标签: objective-c ios in-app-purchase mkstorekit

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

[[MKStoreManager sharedManager] isSubscriptionActive:kSubscriptionMonthlyIdentifier]

这会像我期望的那样返回false。但是,由于它是自动更新,我希望MKStoreKit可以联系Apple以重新验证订阅。也许我正在使用MKStoreKit错误,但根据docsblog post,它应该简单如下:

//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不会让我知道?

1 个答案:

答案 0 :(得分:3)

documentation说:

  

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

     

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

     

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

你可以尝试:

  1. 测试更长的订阅期,以便“系统”有更多时间续订订阅(6mo = 30min,1y = 1h)?
  2. 运行一个计时器以继续检查订阅是否会在一段延长的时间后续订?
  3. 通过恢复购买来强制续订?
  4. 此外,详细here确保您在检查之前没有等待超过订阅期的六倍,因为订阅每天只能为一个测试帐户续订六次。

    我即将开始在我自己的应用程序中实现这一点,所以如果我遇到同样的情况,我会回复。

    更新:

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

    我已将我的实施内容发布在github上供您阅读。