Changing existing App to In-App (IAP)

We have an app selling on the AppStore since 2009, and would like to change it to in-app purchase in addition to buy all.


Currently it has a couple of dozen tools that we would like to begin charging separately for, for users who would rather cherry pick instead of buying everything. The app is relatively expensive, developed for a niche market.


Rather than creating a completely separate app and have to support two versions... We would like to change the current app to in-apps purhases.


The problem is, how to handle the thousands of users who have paid for the app before changing to in-app purchases. How do I give them access to all of the in-app purchases?


Our sofware engineer advises that we have each current user register via the app, using our server. So, when we release the new in-app version we can unlock all of the in-app purchases for the registered users who purchased previously.


I don't think this is the perfect solution, since there will be thousands of users who will fail to register in time, requiring us to manually verify them as users and subsequently unlock all of their in-apps. After two months of this registration only 10% of 27K users have registered.


We would appreciate any suggestions and new ideas. Thank you for your time and consideration.

Replies

You create a new version with a 'build' value that is unique. The app checks its receipt for the value of the original_application_version which is the build number of the original purchase. If the value is not the current build then grant all IAPs.

Thank you for you suggestion. My developer would like you to elaborate if you would. "What does a build value have to do with the original application version if you dont know who is associated with that?"

Your developer needs to read and understand this document:


https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html#//apple_ref/doc/uid/TP40010573-CH106-SW2


Original Application Version

The version of the app that was originally purchased.

JSON Field Name original_application_version

This corresponds to the value of

CFBundleVersion
(in iOS) or
CFBundleShortVersionString
(in OS X) in the
Info.plist
file when the purchase was originally made.

In the sandbox environment, the value of this field is always “1.0”.


The CFBundleVersion is the "Build" number for your app. Your code will need to grab the receipt and decode it or send it to apple for decoding. Then your code will identify from the value in this field whether the user purchased the free version or the paid version. If you do not know the CFBundleVersion of all earlier versions (the paid versions) then you can start using numbers that start with a, for example, "3". 3.1, 3.1.2, 3.1.4, etc. If the value in this field starts with a 3 then the user bought the free version.

Thanks very much for your time! I will pass on the information and get back to you.

This from my developer in response to your reply.

"The thing he is talking about is getting the receipt of the an inapp purchase. Not an app store purchase. These are two different things. He might be thinking you are asking about inapp purchases."


I think you do understand my question, but just to be clear... I have an app on the App Store and it presently does NOT have in-app purchases. It currently sells for $9.99. We want to release a new version that is free (or only $.99), but has most of the content listed as various in-app purchases. What we need is a way to unlock all of the content for users who purchased the app before it had IAP. It's been selling since 2009, and I don't want previous users to lose content that they paid for when it was just an app without IAP.


Thank you.

All apps have a receipt (but sometimes you may need to SKRefreshReceiptRequest if the app was loaded into the device certain ways). The field "original_application_version" is in all receipts. It's value will be equal to the CFBundleVersion (aka Build number) of the version that the user bought. If that version cost $9.99 then give him the rights that can be purchased under the IAP.


If your developer does not respond "oh, now I understand" then get a new developer.

Thank you for creating an aha moment. Will let you know when we implement if there are any further questions. I appreciate you taking the time to guide me through this.