对于autorenewable订阅的第一百万个问题,我很抱歉,但我不明白 . 我已经完成了苹果应用内购买指南中的描述,但它没有解决问题 .
我的问题是我创建了autorenewable订阅,但他们不会自动更新 .
我创建了一个Payment Transaction Observer类,它实现了SKPaymentTransactionObserver接口 . 此类将在 viewDidLoad:
方法的Application启动时作为paymentObserver安装 .
PaymentTransactionObserver * observer = [[PaymentTransactionObserver alloc] init]; [[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
在paymenttransactionobserver中,我有paymentQueue:updateTransactions方法:(与Apple文档中的describeet相同)
(void)paymentQueue:(SKPaymentQueue *)队列updatedTransactions:(NSArray *)transactions {for(SKPaymentTransaction * Transactions in transactions){
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 回答
自动续订仅会在应用启动时发布到应用的购买排队,或者在退回后退回 . 尝试单击主页按钮,然后返回到您的应用程序 .
如果订阅是自动更新的,则事务将不会传递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
但是,沙盒中似乎存在错误 . 订阅有时会更新,有时不会 . 难以测试....