I work on a new version of my application already available on the Store.
For the moment this is a paid app.
I want to change my business model and set the app price to free with the possibility for new users to unlock some features by purchasing an in-app.
I already understand how to add the in-app.
I don't know how to manage users that have already bought the app!
What is the good way to detect / unlock an in-app for my previous users when they will update the app?
Thanks
François
I would do it in three steps:
Publish a new release of the paid app that includes a feature that sets a SharedPreference (or any other way) to mark the fact this one was paid
While users are upgrading to the new version, prepare the future free release in a way it checks whether the SharedPreference described in 1. exists. Unlock features accordingly and keep them locked for non-paid instances
Publish this new version and switch to the free business model. The SharedPreference will survive the upgrade.
This would work for most users but this is not perfect though: users who will have either
uninstalled/reinstalled the app (even the new free version)
installed the app on a new device (even the new free version)
kept a former version of the paid app that doesn't set the SharedPreference
would not benefit from the unlock.
Answer from Google support:
"there isn't currently an easy way to allow users that have previously purchased the app to buy in-app products. These users might have to purchase the in-app items like all other users. We apologize for any inconvenience this may cause."
Related
First I had created one app, which I uploaded into the Play store with some price, and I got some downloads. Now I want to add in-app purchases to my app and I want make my app free.
If I update my .apk (with in-app purchase) into the Play store then it will send notification to the users who have purchased my app.
If they are updated then it will show in-app purchases also so they have to purchase some modules.
So I want to set in-app purchases as active for users who have purchased my app.
Is there a specific process for accomplishing this?
You can make a paid app be free
Is there a specific process for accomplishing this?
No, their is no official way to do this, Because In-App you have to add items on google play and its show to every user util he/she pay for that In-App Item.
but you can handle by your own way.
Like if user already pay then you have to hide in-app(or whatever your app flow) for that perticular user and enable that future for them.
So no need to pay again for same
in sort you can handle by JAVA code(because you have list of paid user)
If app have same package and current version is new then installed then its update app(make sure both version are signed with same certificate/keystore)
Important:
If you change an app from Paid to Free and save the change, the change is permanent. Once changed to free, the app can't be changed back to a paid app. If you want to charge again for a paid app that you’ve changed to a free app, you would need to create a new app with a new package name and set a price for the new app.
Android Developer Help
first of all you have to add vending inapp billing files in your package, then in manifest you have to give permission. thats from application side, now you have to configure product id and licence key. Below is very useful link which i also had applied, Hope it works for you too :)....
Sample Project && configuration
My little contribution is that setting the app to use in-app purchases is in the Content Rating (of all places) There is one checkbox!!! Lost an hour at least on this.
I have a successful paid for application on Google Play Store and want to update this app to be a free application with in-app purchasing.
I have just completed developing the free version of the app which gives users restricted access which can then be unlocked using an in-app purchase system.
The issue i have is that all my existing users who have paid for the app will upgrade and then be prompted to pay again, which of course isn't right.
Is there any way to check the purchase history of the user, identify that they have paid for the app previously and unlock the extra features without the in-app purchase?
Thanks for any help.
Lewis
It's been a year, so the OP probably doesn't need this, but in case anyone else happens upon this one...
You could approach this a couple of ways. Obviously there is some business logic on your new in-app purchasing app to track who has/hasn't paid. So the two ways I see you being able to go about this is as follows:
Idea 1:
You could do a preliminary update to your paid app that stores a SharedPreference or some other persistence in the app (you could store the versionCode, so you know what you're upgrading from and have business logic around that). Then update to the free version, and have the free version check your shared preference and do the right thing on an update from a "paid" versionCode.
Idea 2:
You could keep both apps separate (have a paid version and a free with in-app purchases) and push an update to the paid version to have a BroadcastReceiver that doesn't really do anything other than listen to specific intents and have your in-app purchase check to see if something will receiver your custom intent. If your old paid-version exists, then they paid for it, if not they didn't. (If they paid for the paid version then uninstalled you'll have problems obviously...)
Idea 3:
You could keep both apps separate (have a paid version and a free with in-app purchases), and push an update to the paid version that just posts an Intent to open the in-app purchase app (if it's installed) with some special arguments, to let you know they opened it via a paid app and do the right thing to set them up as having paid for it in-app. That opens yourself up to some detection problems though... (Solvable but kind of clunky)
You can keep the existing paid version and create another free version.
If you really don't want to have 2 versions, just make it free and tell users something like 'Contact us if you have bought the paid version. We will give you redeem code to unlock xxx'.
https://developer.android.com/distribute/tools/launch-checklist.html#decide-price
This link seems relevant, hope it helps
On Google Play, you can publish apps as free to download or priced. Free apps can be downloaded by any Android user in Google Play. Paid apps can be downloaded only by users who are in a country that supports paid downloads and have registered a form of payment in Google Play, such as a credit card or Direct Carrier Billing.
Deciding whether you apps will be free or paid is important because, on Google Play, free apps must remain free.
Once you publish an app as a free app, you cannot change it to being a priced app. However, you can still sell in-app products and subscriptions through Google Play's In-app Billing service.
If you publish your app as a priced app, you can change it at any time to be a free app (but cannot then change it back to priced). You can also sell in-app products and subscriptions.
If your app is be priced, or if you'll be selling in-app products, you need to set up a Google payments merchant account before you can publish.
I feel the most easy way is to use theese line of codes
This gives you the old version code
SharedPreferences prefs = getSharedPreferences("Name_of_Prefs", MODE_PRIVATE);
int oldVersionCode = prefs.getInt("version_code", -1);
This gives you the current version code
int currentVersionCode = getPackageManager().getPackageInfo(getPackageName(),0).versionCode;
Now you can compare and do what you want. Don't forget to update after every time
with this line of code
prefs.edit().putInt(PREF_VERSION_CODE_KEY, currentVersionCode).commit();
In my case (affirmations counter app)
my paid app is running based on sharepreference value "lastaffirmationcount"
in my new iap app i just changed the way of I'm saving the affirmations counter values like "lastaffirmationscount_foriap"
So what i did in my free with In app purchase app is,just cross checked the "lastaffirmationcount" value is not null,if its null then it means new user,if not null then it means he is old user who bought the paid app
so the old user will not suffer forever
(Optionally Once its checked i immediately ask this user to sign in with google and saved his email as a premium user to ur database)
For Google Play there's no distinction between having paid for an app or downloading it for free. For example, if an user download an app while it's free and it's later changed to paid that user will still have full access to it, even being able to download it on other devices.
There are some lame workarounds for that:
Enable google play game services on the paid version and try to convince users to connect to it. Use google play services to store "bought while paid" information to the cloud and restore it whenever that user logins
Give all the users who've bought some key to unlock features
Create a different for the free version of the game
That said, keep in mind that many games have become free after some time. Maybe the users won't mind it that much.
I want to publish an android app which is free on download but can be upgraded using in app purchase. Right not I want to keep all functionality intact in the paid version and implement inapp purchase and disable full functionality later when releasing a new update.
Is this possible to do such a thing because on the developers console it says that"Setting the price to 'Free' is permanent. You cannot change it back to 'Paid' again after publishing"
Or should I follow the first few steps of implementing inapp purchases like adding permissions,aidl files etc.,then release the free app?
This term is only about the initial prize of the app.
In app purchases are totally independent of that.
Yep you can add in-app purchases later altough your app is free without problems.
I want to be able to get the state of the user purchases but on the current app they are in from when it was paid to free.
For example App SuperCars was paid app but the latest update makes it free with in-app purchases. I want previous users who paid for the app to have access to paid content but new users to have no access in which they would need to pay.
Can anyone give me an example of how I would do this? How do I get the user paid sate??
After looking around and contacting certain people I've found out that it's not supported by Google, I'm disappointed at the developing Apps for Google Play, lots of features still missing.
Think about it, essentially you have launched a new product. Its not the same product, its a modified more useful product. Infact you should release this as a different product, different package, and check if your other product is also installed. If yes, provide the in app features free. Let both products coexist.
One more way is to update the older product (with a bug fix) that broadcasts its "paid" status. Then when you install the new app (free with inapp purchases) you can know that they have already paid for the app.
But if they have uninstalled the older app, then they have to install the older app to use it free.
So essentially you customers have 2 choices
Install the older product, pay for it. And install and use the 2nd product free.
Install the newer product and use in-app purchases.
DONT look for a way for google play to give you a status of a user's paid progress of a previous version of the app. Sorry, this looks like a crazy api to implement (even for google :)).
This question might be off topic, but I wanted to ask the fellow developers.
Is there a way on Google play I could change my free app to a paid app?
What would happen to the existing users if it is allowed? Would they be asked to pay when the new update is available?
You cannot change a free app to a paid app on the Google Play store. You could re-upload under a different name, but this would obviously fracture your user base.
You could add in-app payment processing to your free app and charge for enhanced features. Per
http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1153479
"By using the in-app billing feature you can add revenue-generating features to your applications, enhancing the revenue potential of paid applications and turning free applications into new revenue sources."
Now, could you disable functionality that was already available in the free app, and then charge via in-app payments to have it restored? Technically I do think it could be done, since you are in control of your implementation of those features, although you would have to investigate whether that would be a violation of Google's policies.
However, doing it might alienate your users, and if word got around they might even stop updating your app to avoid the "trap." So a much better approach would probably be to add enticing new functionality that enhances the existing functionality, and then charge for it.
You cannot. Check this
"Once your app has been offered for Free, the app can't be changed to Paid. If you want to charge for the app, you need to create a new app with a new package name and set a price."
Its not possible, we need create paid app always then you can make it free