自动续订订阅不会自动续订

时间:2011-09-28 09:38:37

标签: ios in-app-purchase sandbox restore

对于关于autorenewable订阅的第一百万个问题感到抱歉,但我不明白。 我已经完成了苹果应用内购买指南中的所有内容,但它没有解决问题。

我的问题是我创建了可自动更新的订阅,但它们不会自动更新。

我创建了一个Payment Transaction Observer类,它实现了SKPaymentTransactionObserver接口。此类将在viewDidLoad:方法的应用程序启动时作为paymentObserver安装。

  

PaymentTransactionObserver * observer = [[PaymentTransactionObserver alloc] init];

     

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];

在paymenttransactionobserver中我有paymentQueue:updateTransactions方法:(与Apple文档中的describeet相同)

  
      
  • (void)paymentQueue:(SKPaymentQueue *)队列updatedTransactions:(NSArray *)transactions {   for(SKPaymentTransaction *交易中的交易){
  •   
    switch (transaction.transactionState) {

        case SKPaymentTransactionStatePurchased: 

            [self completeTransaction:transaction]; 

            break;

        case SKPaymentTransactionStateFailed: 

            [self failedTransaction:transaction]; 

            break;

        case SKPaymentTransactionStateRestored:

            [self restoreTransaction:transaction]; 

            break;

        default:

            break;
    }
}

当我购买自动更新产品时,该产品将成功购买。 但它永远不会被自动更新。我想到,事务观察者,不知何故将被解除分配,但它不会(Otherwhise,我会被调试器通知)。我也是,我确实删除了观察者,但它永远不会被删除。

我使用调试器来确保调用updateTranscations:方法,但什么都没有。当我购买一个自动更新时间为一周的测试产品(沙盒模式)时,该方法应该在3分钟后调用,但它不会。

我做错了什么?

有人可以帮忙吗?

Br Nic

2 个答案:

答案 0 :(得分:1)

如果订阅已自动更新,则交易将不会传递paymentQueue:updateTransactions方法。更新只发生在商店。如果你想测试它,你必须:

  • 如果您将收据存储在应用程序服务器上,请重新验证收据。

  • 重新验证您的iOS客户端上的收据

(http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/VerifyingStoreReceipts/VerifyingStoreReceipts.html#//apple_ref/doc/uid/TP40008267-CH104-SW1)

为了避免在每次启动/激活时测试autorenew,您应该存储订阅期的endDate以测试之后的续订。

另见:

http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/RenewableSubscriptions/RenewableSubscriptions.html#//apple_ref/doc/uid/TP40008267-CH4-SW4

但是,沙盒中似乎存在错误。订阅有时会更新,有时不会。很难测试......

答案 1 :(得分:0)

自动续订仅会在应用启动时发布到应用的购买排队,或者在退回后退回。尝试单击主页按钮,然后返回到您的应用程序。