2

I am working on a Newsstand app that has an Auto-renewable subscription that renews after every 12 months. The problem is when an already subscribed user tries to purchase the Subscription again. According to the documents, StoreKit framework should return SKPaymentTransactionStateRestored if the user is already subscribed, but it returns SKPaymentTransactionStateFailed in StoreKit delegate method:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

Steps:

  1. Purchase an auto renewal subscription
  2. Upon successful purchase, delete and reinstall the App again.
  3. Again purchase an auto renewal subscription with same Apple id and password or try to purchase the same Subscription on a different device using the same Apple Id.

I doubt that instead of restoring the previous purchase, it makes a new purchase request and updates the Subscription period accordingly.

This is not an account based app, so I cannot store and check the Subscription period on server.

Explosion Pills
  • 188,624
  • 52
  • 326
  • 405

1 Answers1

4

You should add two buttons into your app:

  • Purchase - will just purchase the auto-renewing subscription
  • Restore - will try to restore existent subscription with [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]

You could write some explanations in your UI for the user like "if you already purchased this subscription just tap restore"

This technique has been invented during three or four rejections from Apple because "user should have the ability to restore their subscription", "user should not get password prompt if he doesn't expect it" (it asks for user pass when restoring completed transactions), and so on.