Consumable and non-consumable in iOS

We are the three guys who made a free iPhone game that has been available on the App Store for almost a year now.

The application is a board game in which you create a user or login using your Facebook credentials. You can exit the game and log in with a different account.

Now we have updated the application with the ability to upgrade the user to a premium user. Resolution of personal and global game statistics.

But Apple gives us a headache in the approval process and refuses to accept our in-app purchase. At first they did not approve of him, since he did not have a restore button. Then, when we told them, a recovery button was not required, as it was a consumer purchase, now they require us to change it to non-expendable and add a recovery button.

Consider this scenario if the purchase was not consumable.

  • The user is logged in.
  • User upgrades account to level
  • User logs out.
  • The user is logged in with a different account.
  • The user restores the previous purchase.

This will allow you to upgrade two accounts to a premium, but with one purchase.

Apple’s argument is that our users should be able to restore purchases if a new device is configured or the device is restored.

But that is not how it works. Users upgrade their accounts to premium accounts. Now, when they buy a new device or restore an existing device, they simply log in with the existing game account, and the update will be available because we have marked the account as a premium account on the server side.

So my question is basically. Were we completely wrong when we decided to use supplies instead of not consuming. And if so, how should non-consumables be implemented in order to be (potentially) acquired more than once with different game accounts on the same device?

And secondly, if we are right about using spent purchases in the app, what should we say to convince Apple that we are on the right track?

+7
source share
2 answers

If your premium account is something that your users only have to buy once, Apple certainly has the right to ask you to switch to the obscene in the app.

The scenario that you described is quite possible (I also had to deal with this), but if you add a check towards the server side before unlocking the premium function (saving all transactions related to the user), you have a chance to make sure purchase is new or restored by checking the fields original_transaction_id and original_purchase_date in the receipt data. Thus, you can see if the user restoring the purchase is the same as the one who originally bought it (perhaps checking his facebook user ID).

In any case, experience has shown me that the likelihood of this is not very high, and I would not recommend checking this check (although checking on the server side is almost always required ;-))

+4
source

In the Transaction Recovery section of the Programming Guide for App Purchases:

If your application supports the types of products that need to be restored, you must enable an interface that allows users to restore these purchases.

If your application contains outstanding purchases, and if you do not enable the restore button, the apple will not approve your application.

It became necessary for the apple after June 2012.

So, to answer your question: No, it seems that you should use restoreCompletedTransactions .

Hope this helps you.

+2
source

All Articles