开发者

Autorenewable Subscriptions won't be autorenewed

开发者 https://www.devze.com 2023-04-08 18:44 出处:网络
Sorry for that millionth question on autorenewable subscriptions, but i don\'t get it. I\'ve done everything as describet in Apples In-App Purchase Guidelines but it didn\'t solve the problem.

Sorry for that millionth question on autorenewable subscriptions, but i don't get it. I've done everything as describet in Apples In-App Purchase Guidelines but it didn't solve the problem.

My problem is that i have created autorenewable subscriptions but they wo开发者_StackOverflow中文版n't be autorenewed.

I've create a Payment Transaction Observer class, which implements the SKPaymentTransactionObserver interface. This class will be installed as a paymentObserver at Application startup in the viewDidLoad: method.

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

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];

In the paymenttransactionobserver i have the paymentQueue:updateTransactions method: (same as describet in Apple's documentation)

  • (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { for (SKPaymentTransaction *transaction 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;
    }
}

When i buy a autorenewable product, the product will successfully be purchase. But it will never be autorenewed. I thought of, that the transaction observer, somehow will get deallocated, but it won't (Otherwhise, i would be notified by the debugger). I also though, i did remove the observer but it will never be removed.

I used the debugger to ensure, that the updateTranscations: method will get called, but nothing. When i buy a test product (in sandbox-mode) with autorenewal time of one week, the method should get called after 3 minutes, but it wont.

What am i doing wrong?

Can anybody help?

Br Nic


If a subscription is autorenewed, the transaction won't pass the paymentQueue:updateTransactions method. The renew just happens on the Store. If you want to test for it you have to either:

  • Revalidate the receipt on your application server, if you store the receipt there.

  • Revalidate the receipt on ur iOS client

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

In order to avoid testing for an autorenew each launch/activation you should store the endDate of the subscription period to test for a renew afterwards.

Also see:

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

However, there seems to be a bug in the sandbox. Subscriptions sometimes get renewed, sometimes not. Hard to test....


Auto-renewals only get posted to your app's purchase queue on app launch or when it cycles back from being backgrounded. Try clicking the home button and then returning to your app.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号