views:

327

answers:

2

The current version of an application in the App Store is free and has very limited functionality. An In-App Purchase unlocks everything else.

I have decided to remove the In-App Purchase and just make the application cost the same price as the In-App Purchase did. But if I make the update now, then those users who have the free version but who have not yet paid for the In-App Purchase will get a free update into the full version.

I have removed all traces of my singleton class, PurchaseManager, from the application, so that at this point, when I build/run it, all of the features are unlocked. At this point, how can I make sure that the free-version users don't just ride an update into the full version?

Maybe there's a way to test whether the app is obtained through an update or through a purchase? That way, if it's through an update, I will see if it's the free version w/o the IAP and then force the user to purchase the IAP to continue playing.

Any ideas?

A: 

Not that easy. Push out a minor update your current app and record the device ids of all those who got the in-app activated.

post a blog on your site asking users to send in their device ids and emails for re-imbursing the cost of the in-app purchase. You can cross verify this from the collected device ids.

I know this is painful. Most people who first released their apps on Cydia and then officially on app store did this. For example, snapture.

Mugunth Kumar
+1  A: 

There was a user default that was guaranteed to be set in the first version. If the objectForKey: returned nil, then it was never set which means the first version was never run. In that case, I set YES to the user default for whether the In-App Purchase was purchased.

The above ran only once, which guaranteed that users of the demo continued to use the demo until they bought the In-App Purchase (priced the same as the second version of the game), and that users of the full version from v1.0 had the full version as planned.

Arseniy Banayev
Interesting approach. So you leave all of the IAP functionality in, but only show it to the users of the free version who never upgraded. The only drawback is having to support IAP in future versions. As for the NSUserDefaults value that only exists in the first version, i guess a simple solution would be to rename some default in subsequent versions. So, newer versions of the app would use "username2" instead of "username" and if "username" was defined, it was clear that the user had an earlier version.
Jason Moore