My app will allow the user upgrade to Pro features via an In-App Purchase. I am validating the receipt data with my own server, and one the confirmation comes back from my server, I call finishTransaction:
What will happen if the validation fails (perhaps not due to piracy attempt) and I dont call finishTransaction: ? Will it stay in the queue indefinitely?
I always found that I got strange behavior afterward at some point, if
FinishTransaction wasn't called.
The best option is to set a setting in
StandardUserDefaults, etc. indicating "I bought this but it failed", and call
FinishTransaction. Then when they restart the app (or foreground the app) you could check for this and send it to your server.
Also, if your purchase is not a consumable (i.e not buying coins or money), you can just call
FinishTransaction and tell the user to activate
RestoreTransaction from a button in your settings menu. This button is required by Apple for non-consumable purchases anyway.