3

When selling a non-consumable item through in-app purchase on iOS, the restoreCompletedTransactions method is provided so that you can retrieve all of the purchases a user has made in the past, which as I understand it is to give the user a quick way to restore their purchases, for instance when they get a new device.

I understand that if you are going to call restoreCompletedTransactions there is a question about whether it should be called automatically or manually when the user presses a button (see here for instance).

My question is whether it's necessary to call restoreCompletedTransactions at all. If my app has only one or two things to sell/unlock, it seems acceptable to let the user go through the standard purchase UI, as long as there's a note explaining that the user won't be charged again if purchasing something they've already purchased. So, say the user installs my game on a new device. On their old device they already purchased/unlocked Level X. When they get to Level X on the new device, it asks if they want to purchase it (explaining that they won't be charged twice if they purchased it previously), and they say yes, and they now have Level X on their new device, and they were only charged once (when they purchased it on their old device).

Is that a kosher way to handle it, as far as Apple approval is concerned? I can see how, if they had purchased 100 individual items it would be nice to give them a way to restore them all at once. But if it's just one or two unlocks for the whole app, is my no-restoreCompletedTransactions approach acceptable?

Community
  • 1
  • 1
M Katz
  • 5,098
  • 3
  • 44
  • 66

2 Answers2

5

According to the 'Restoring Transactions' section of the In-App Purchase Programming Guide:

However, if your application supports product types that must be restorable, you must include an interface that allows users to restore these purchases.

We had an app with a non-consumable purchase, and we didn't include a restore button, instead relying on the default behaviour when the user tried to purchase again.

This was approved when we first submitted the app (May 2012), but then later (June 2012) when we submitted an update in an unrelated area, the update was rejected.

So to answer your question: No, it seems that you must use restoreCompletedTransactions. Although you might get away with it sometimes.

Saxon Druce
  • 17,406
  • 5
  • 50
  • 71
  • Thanks. We have now added a Restore button to both of our apps. – M Katz Jun 23 '12 at 16:22
  • 1
    yes, same thing happened to me, am having to add a restore button/feature. in a way, i'm happy to do so, because we received quite a bit of feedback from users confused about whether they would be charged a second time. the documentation wasn't clear that restore would reprompt for appleid password -- too bad it does, as otherwise we could just automatically restore on first-run/-install. – natbro Jul 14 '12 at 18:39
2

Restoring should be done only with user's action. You can have a button called Restore Previous Purchases or something.

The reason is, calling on restore shows the Authentication Window which is not considered good UX.

Hopefully with iOS 5, this problem is solved using iCloud.

Mugunth
  • 14,461
  • 15
  • 66
  • 94
  • Thanks, but not quite the question I was asking. I know it's not good to initiate a restore without the user's action. My question is whether it is *required* to provide a restore mechanism/button, or whether it's okay to just make the user go through the original purchase process as a way of restoring, especially if you only have one or two items for sale total. – M Katz Jul 16 '11 at 00:06
  • It's ok not to have a restore button. In fact if you ask me with iOS 5, users should automatically get all the purchases made on any device through iCloud (the same way they get App Purchases) – Mugunth Jul 16 '11 at 00:13
  • But as on date, with iOS 4, you can't do this. If you have anything more than 5, I would recommend having a separate button to restore them. – Mugunth Jul 16 '11 at 00:14
  • 2
    There is one other advantage of having an explicit restore button. For people like us, we have a local Singapore iTunes account and a US Store account. When you call restore, Apple pre-populates the account email automatically based on from which store it was purchased. This will not happen when you tap Buy normally. Sometimes I have purchased the same product twice, one from my store and again from US Store. – Mugunth Jul 16 '11 at 00:16
  • Thanks. I didn't know about the two-store issue. I'll consider adding a restore button. But for our initial release I'll just rely on the normal purchase mechanism. – M Katz Jul 16 '11 at 00:20