2012-09-14 196 views
4

我正在使用MKStoreKit來處理自動更新訂閱。我目前正在測試一個月的訂閱(測試訂閱持續5分鐘)。我購買訂閱後,我等待它過期。一旦到期,我會檢查訂閱是否仍然有效。MKStoreKit自動更新訂閱

[[MKStoreManager sharedManager] isSubscriptionActive:kSubscriptionMonthlyIdentifier] 

這會返回假像我所期望的。但是,由於它是自動更新的,因此我期望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:^ 
{ 
... 
} 

我的問題是爲什麼,當訂閱仍然活躍在蘋果的結束也MKStoreKit不讓我知道?

回答

3

documentation說:

爲了測試的緣故,也有在生產環境和測試環境自動再生訂閱之間的行爲有些差異。

更新速度加快,自動更新訂閱每天最多更新六次。這使您可以測試應用程序如何處理訂閱續訂以及它如何處理續訂以及如何處理包含間隙的訂閱歷史記錄。

由於加速到期和更新率,訂閱可能會在系統開始嘗試續訂訂閱之前到期,在訂閱期間留下一小段時間。出於各種原因,這些失誤也可能出現在生產中 - 請確保您的應用正確處理它們。

你能嘗試:

  1. 測試更長的認購期,使 「系統」 擁有更多的時間來更新訂閱(6mo = 30分鐘,1Y = 1小時)?
  2. 運行計時器以檢查訂閱是否在較長時間後更新?
  3. 通過恢復購買強制更新?

此外,詳細的here確保你檢查之前等待的時間還不超過六倍的認購期間,作爲訂閱可以更新單個測試賬號每天只有6次。

我即將開始在自己的應用程序中實現此功能,因此如果遇到同樣的情況,我會回寫。

UPDATE:

我讀(某處)當一個應用程序被終止之前24小時後在期間發射的發生時自動續訂。這可能很難在沙箱中複製。更新也可以通過刷新應用收據(> = iOS 7)或重新驗證最近購買的收據(< iOS 7)來強制更新。

我已在github上發佈了我的實施,供您細讀。