4

Our app is moving from paid to free, and in the process, moving a key functionality from being included to activating via In-App purchase. Obviously, we don't want current users who paid for the app functionality to be charged again in the In-App purchase for functionality they already had. So on the update by the user, we want to 1) identify current users and 2) make it so they don't see the In-App purchase in the first place, sort of 'faking' the In-App purchase so that the app will appear to them exactly as it did before.

The app does not have a backend, so we have to determine current users from new by examining the saved user data fields for certain values. I do understand that if a previous user has deleted the app from their device that nothing can be done, and I don't mind charging them for the In-App purchase, since they never used the app anyway.

But for those current users who update and assuming we can examine the saved user data and determine that they are current users, what would be a good way to bypass the In-App purchase and make the app look like they already got it, when in fact they never paid for it? Thanks!

Undo
  • 25,519
  • 37
  • 106
  • 129
  • There's no good way for the *developer* download an in-app purchase for free, so it seems unlikely there would be a way to let a *user* do it. – matt Apr 29 '13 at 19:55
  • See http://stackoverflow.com/questions/1575965/transition-an-existing-paid-for-app-to-free-version-with-in-app-purchase?rq=1 – Nick Moore Apr 29 '13 at 19:59
  • Just upload a free trial and ask people to purchase it if they want to? – Nimooli Apr 29 '13 at 20:19
  • 2
    You're probably gonna have to submit a mid-term update (of payed app). This update should write 'something' to keychain. Then submit another (free) update. If that 'something' is in keychain at the apps first launch - user is an legit owner of a previously payed app. You could do something similiar with NSUserDefaults or with iCloud (so user will be able to have this app on all his devices - as he is supposed to). Hope this makes sense. – Rok Jarc Apr 29 '13 at 20:39
  • All good thoughts guys, but I think we can easily tell if a user is current by examining the values of the stored user data settings, so that is not the problem. What I really need to know is how to handle bypassing an In-App purchase and make it look like it is already completed (without any action on the part of the user required). – user2333468 Apr 29 '13 at 20:53
  • Then you shouldn't have any problems: in new app at first run just check for existing settings and set up a flag `payed_app` (in one form of permanent storage) if they exist. Then - also in new app - replace all the `if (purchased_x) ...` with `if (purchased_x || payed_app) ...` – Rok Jarc Apr 30 '13 at 08:55

2 Answers2

1

Here's what I would do - keep in mind this will take some time:

  1. Set up a server (I prefer EC2) with mySQL on it. Plenty of tutorials about this.
  2. Submit an update to your app that sends the user's UUID to your server.
  3. Wait. This is the hardest part. You'll need to wait until satisfactory majority has updated to your app. That majority percentage is up to you to figure out. It could take months for this to happen.
  4. Make your new, free, app send the UUID to the server.
  5. Check to see if the UUID is in the DB.
  6. If it is, set whatever you would have set when an in-app purchase was made to true.
Undo
  • 25,519
  • 37
  • 106
  • 129
  • +1 for effort: but i think your solution is over-complex. He doesn't have a backend for this app - so why setting it up if not needed. A mid-term app is needed in either case: setting up a server is not. If backend server allready existed then your advice would probably be the most elegant solution. – Rok Jarc Apr 30 '13 at 08:58
1

You have several options:

Free in-app purchase for a limited time:

  • You would create a free tier in-app purchase content and release an update that somehow makes the user sign up for it. This way, when your user switches devices they can restore the purchase and regain the functionality.
  • Wait for a period so most people use the in-app purchase content
  • Change the tiers and release your app as free

Dual versions

  • Make a demo version of your app. Note this can be rejected by Apple.

Create a file in the filesystem

  • Make a file in the filesystem and save into iCloud. The app will check for the file and thats how you would determine if the user has paid for the app (or should buy the in-app purchase).
  • iCloud will synchronise the file between user's devices and it will make sure that whatever device the user uses the app will see the user as 'paid'.

I hope this helps, currently having this problem myself.

Matej
  • 9,548
  • 8
  • 49
  • 66