Restore Purchases is Mandatory In case saved in our system? - ios

I searched a lot and did not find a concept for "In-App Purchases restore"
in our application all users can't used without login by email and pass, and all purchases saved in our system to enable multiple platform so the button of restore purchases is mandatory with this case or not?

The App Store Review Guidelines says:
Any credits or in-game currencies purchased via in-app purchase may not expire, and you should make sure you have a restore mechanism for any restorable in-app purchases.
So yes, a restore mechanism is mandatory.
Apple of course doesn't say it needs to be a button. Perhaps you can implement it without any user input; for example at first app startup.
Also, a restore method is mandatory, regardless of where/if you store a purchase. I mean, if you wouldn't have a backend system, you are still required to have a restore mechanism.
(It's good to read all App Store Review Guidelines.)

Related

In-App Purchases: Restoring Purchases Server Side

iOS requires all apps have "Restore Purchase" functional through StoreKit or they are rejected. If my app keeps track of purchases on the server side do I still need this button? It would effectively do nothing if I'm thinking of this correctly since all of my in app purchases are managed at the user account level server side.
See this answer here: https://stackoverflow.com/a/54153169/3166209
In summary:
If you have your own account based system, you aren't required to
restore purchases from the device receipt if they can be restored by
logging in to their (your) account. You're required you to have
restore functionality, but it doesn't have to be implemented through
StoreKit. Apple vaguely mentions this in their docs as do service
providers.
You'll notice large, cross-platform, subscription apps like Netflix don't have a restore purchases button anywhere. This is because restoring purchases with the device receipt could allow a single receipt to be shared across multiple users that log-in on the same device.

Our iOS game just got rejected for not having restore mechanism to the life time goods

I have used consumable virtual currency purchases in my game.
The user can use that currency to unlock different types of jetpacks.
Apple rejected the game saying it requires a restore purchase button.
But apple's documentation says that consumable products does not require restore.
Why is apple considering the unlocked jetpacks as non-consumable products?
Following is the message that i have received in iTunes connect.
From Apple
10.6 - Apple and our customers place a high value on simple, refined, creative, well thought through interfaces. They take more work but are
worth it. Apple sets a high bar. If your user interface is complex or
less than very good, it may be rejected
10.6 Details Your app uses intermediary currency to purchase items that function as non-consumable products but does not include a
restore mechanism. Users restore transactions to maintain access to
content that they’ve already purchased. Next Steps Please modify
your app to include an optional user registration feature that allows
users to restore their purchases to all of their iOS devices. We
recommend indicating that account registration is necessary to restore
previously purchased In-App Purchase products, and providing a way for
users to register later if they wish to access this content in the
future.
Should i make a restore mechanism for the jetpacks ?
I am using Soomla and unity3d for iap.
In summary, what Apple are saying is that you must include some kind of user registration / account feature where you are storing the users items on your server.
When they sign in on a new device, they should still have everything they have bought in your game.
It seems that Apple considers these purchases as non-consumable products because they are non-consumable products, no matter how you try to handle them in your app. If you define them as consumables, that means a customer loses them when they uninstall and reinstall the app, buy a new phone and restore their old phone to the new one, use the app on several phones, and so on. In other words, Apple considers your use of a consumable purchase to be cheating.
Your customers would feel exactly the same. If your marketing people try to maximise the flow of money from customers to your company, they should consider methods that Apple and your customers don't consider to be cheating.

Inapp purchase restoring consumable products

i have uploaded an application which doesnot have webservices, in my application there is an option for user to buy a coin (consumable) using inapp purchases and use these coins to unlock new level. today apple rejected the application and send me following note:
**
Your app uses intermediary currency (coins) to purchase items that
function as non-consumable products (unlocking levels) but does not
include a restore mechanism. Users restore transactions to maintain
access to content that they’ve already purchased.Please modify your
app to include an optional user registration feature that allows users
to restore their purchases to all of their iOS devices. We recommend
indicating that account registration is necessary to restore
previously purchased In-App Purchase products, and providing a way for
users to register later if they wish to access this content in the
future.
**
how can i fix this, as mentioned earlier i dont have a webserver and i cannot use webservices, is there any way around to fix this and get application uploaded.
finally i fixed it by adding login screen in the application and storing user Object in parse.com and when i use inapp purchase i store coins count on Parse and retrieving it on application startup. thanks everyone.

How to detect if user has made any in-app purchases?

My iOS app has in-app purchases (consumable) and shows ads periodically. The idea is to remove ads after user has purchased anything. But in-app items are consumable, so after user re-installs the app, I would be unable to determine if he has purchased anything using [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];, right? And I would bomb him with ads again...
What would you suggest to find out that the user has purchased anything already?
Well when a user re-installs your app (i.e. delete it and install it again) there is no immediate way of knowing what purchases did he made. That's why Apple requires your app to provide a way to restore previous purchases so that when the user performs this operation he restores these purchases for free.
For consumable items you might need to use a server for managing the purchases such that when the app loads it checks with the server which purchases the user has made and immediately enable the relevant content.
I do not know if mandatory but "Remove Ads" IAP should be non-consumable so the user will only need to purchase it once (Otherwise I believe users will complain or just won't buy it).
Some creative ways can be found here : iPhone - in-App purchase consumable correct approach
As an improvement on the situation, you could store the fact that a purchase was made in NSUserDefaults. That won't survive if the user uninstalls and reinstalls the app, but at least it survives if the user buys a new phone and restores a backup to transfer everything to the new phone.
You could have a look at Cloud Kit as well, which would store information per AppleId. It's a bit overkill for the problem, but it means you can use Apple's servers instead of your own for free. There would be a difference that if a user installs your app on six devices, makes a consumable purchase on one device, ads will stop on all of them.

Subscription Products are Non-restoring, Why Apple is asking me to put up a restore button?

I don't understand Apple Guidelines. I had created an app which is having free as well as premium features.
By default the app comes installed with free features, I had provided the buy button so that user can buy the premium features of the app using the in-app purchase feature.
The duration of subscription is 3-Months and it is non-renewing.
I submitted the app to App store, but apple is asking me to place a restore button in the app, so that users can restore their previous purchases.
on the other hand, It is written in the apple documentation that you cannot restore subscription based apps.
It seems quite confusing to me, Can you please guide what to do in this matter.
There are two possibilities:
1) You don't know that some of your purchases are restorable.
2) Apple doesn't know that all of your purchases are non-restorable.
Follow up with Apple.
EDIT The above is wrong. You need to restore the purchases on your own without their support, since you chose to not use auto renewing. From the IAP guide
You are required to deliver non-renewing subscriptions to all devices owned by the user. Non-renewing subscriptions are not automatically synchronized to all devices by Store Kit; you must implement this infrastructure yourself. For example, most subscriptions are provided by an external server; your server would need to implement a mechanism to identify users and associate subscription purchases with the user who purchased them.

Resources