So we (21st Street Games) submitted an update to Apple for our game Techno Kitten Adventure, including a new in-app purchase. It was rejected due to the Restore Purchases feature not being included. Until now, the way to restore purchases was to "buy" them again under the same iTunes account. I guess now Apple has a new, clearer option. I'm glad if this is the case, because most users think they lose their purchases when they delete their app, I've answered at least 50 customer service emails for this issue. But from what I can tell we weren't issued a warning about this integration (although I only receive submitted/approved or rejected emails.) Has anyone else had an app rejected today or recently based on this? Edit: Uuuugh, Restore** should be in the subject line.
Hi Melissa, Yes, we ran into the same issue this week... We ended up having to add a "restore purchases" button in the app. This is something Apple cracking down on lately. Drew
Happened to me too. Any idea on how long the review process is after the rejection? (My first app being rejected out of 5)
I ran into this with Blast Ball. I resubmitted it a couple of days ago, my guess is it will be the same review time of about a week.
Is this 'restore' function going to be necessary any time there's IAPs then? May I ask what the nature of the historical purchases were that needed restoring? For example, if you buy a bunch of coins in Temple Run, are they going to need a restore purchases feature?
Same thing for me too so working on putting in a restore option as well now. For me it is a feature that you unlock. Not sure how it would be with coins and such consumables.
The restore function needs to be added to an app if it has non-consumable IAP. The coins in Temple Run are consumable so the restore function doesn't apply.
Just a note to say thanks, Melissa. We were just about to hit the buffers on this one ourselves, until I came across your post.
Yes, Restore for non-consumable is now mandatory. If people are wondering how it works... You call: [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; to initiate a full restore. Everytime an item is restored, you 'll get a call to "restoreTransaction", so, you need to add this function (it is similar to completeTransaction when you do a normal purchase) - (void) restoreTransaction: (SKPaymentTransaction *)transaction { CStore::NumRestored++; [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; } NumRestored is part of my own CStore class. I set it to zero before calling a restore. So, I know how many items have been restored. When all the items have been restored, you get a call to paymentQueueRestoreCompletedTransactionsFinished - (void)paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentQueue *)queue { if (CStore::NumRestored==0) { ... } } I'm testing if any items have been restored. If there are none, you can display a message like: "It doesnt look like you've purchased this product with this account." Also, you might want to create this function too for completeness: - (void)paymentQueue: (SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError: (NSError *)error __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0) { } Hope it helps JC
Cool, it was way too confusing before. I'm glad apple is making this change. I know it will make customers more at ease and they won't have to go to customer support web pages just to ask if their inapps are still there.
We (Cannibal Cookout) just got rejected for NO restore button for CONSUMABLE items. I have appealed to Apple as this can't actually be implemented
Just an update ... Apple finally went back and approved the update without requiring me to make any changes, so I'm guessing a reviewer got confused.
Seriously tho, glad to help. Our lead programer for tka is on vacation for a month so we're beat on this update until he comes back; if we can save some frustration for other indies, well, at least something came out of it.