Using the Android LVL for making the application licensed and paid is clearly given.
I still have doubts regarding the free trial , like if i give 30 days free trial but if user changes the date (puts a previous date on device). will it still be available for that total free 30 trial days or will it continue?
Any suggestions to handle that?
Another issue arises that if I want to give my application free of cost to some , how can that be handled if they download it from the google play / market?
There is no built-in support for trial usage in the Android LVL.
There is one way to give out paid apps for free while using the Android LVL and Google Play Store. Go to the Android Developer Console and then click Edit Profile. In the licensing and in-app billing section, enter the Google-associated email addresses of the users you want to give your app to in the "Test Accounts" section. Set the License Test Response to LICENSED. This will now allow you to send the same LVL-containing app APKs that you upload to the Google Play Store to reviewers without requiring them to purchase the app.
Two important notes on using this method:
Users in this list are given access to all of your paid apps and all in-app paid content for free.
If you are using a ServerManagedPolicy, the LICENSED response issued to Test Accounts has a very short license validity period (I believe 1 minute) and a maximum allowable retry count of 0.
The Google Play store does not support trials. You can implement it yourself by storing the usage start date somewhere. If you store it on the device, any user with a rooted device will be able to reset it. You can obfuscate it somewhat to make it harder. You can also store it on a server, but you need some info from the device to associate it with.
Giving apps for free is also not supported. You can develop it yourself if you have some sort of a server and use in-app purchases to enable premium features in a free app. If you want to use paid app, the only way is to actually send people the APK.
Related
I am developing an Android app with two modes
Trial - free with limited functionality. The user has no time limit here. They can continue to use the app for forever but will not have access to full functionality.
Paid - full functionality. The user can make a one time payment to gain full functionality.
I have seen some posts indicating that you could publish two different apps to the Play store, but I would prefer to publish one app and use an internal flag to limit functionality when in Trial mode.
What is the best way to do this on Play Console? Should I set the App pricing as free and then add an In-app product for the paid version? Then from my app I can have a button that makes the request for the purchase?
The Play store indicates that once an app is published as free then it cannot be changed to paid? Is there some way to indicate paid app that has trial with limited functionality?
I don't want to use Subscription since the payment is one-time to get the full App.
Are there other good options to follow?
Using the Google Play Billing Library is the Google recommended way to do this (integrates with GPay nicely), otherwise you can use other payment processors and setup a server configuration to verify users purchases.
Using only an internal flag is not recommended as if users ever clear app data/uninstall their purchase is lost.
We have an application for the PC and we're thinking of writing an Android version of it. But I have a question about how Google Play and in-app purchases work.
On our PC version, the basic version of the app is free, and users upgrade to the paid version to get more features. But rather than "purchase" the app, they effectively "subscribe" - in other words, their upgrade is valid for a specific period of time, during which the extra features are available. They also get free updates and support during that time.
The mechanism for this is that they buy the upgrade and get a license key which they enter into the application. Every time they open the application, it pings our server to check whether the key is still valid. If it isn't, only the basic features of the application are available to them. Obviously they have to be online when they open the application, otherwise they can't ping the server.
The question is how we transfer this model to Android.
We want to make the app available in Google Play, so it has to conform to their rules, which I understand means users can download a basic version for free, and any subsequent purchase has to be done via Google Play, which is fine with me in principle. Rather than have a free app and a paid one, we'd prefer to have just one.
So my favoured option so far is to offer one app with the premium features locked until the user upgrades via an inapp purchase. My questions are:
1 - can the in-app upgrade contain a time limit?
2 - if the user has upgraded, is it technically possible for us to force the app to regularly ping our server in order to keep the extra features activated?
We offer refunds on demand for the software, because it's complicated to use, so if we do refund someone, I'd like to be able to deactivate their key on our server.
Grateful for any thoughts you have!
1) There are "consumable goods" and subscriptions
2) An android app can contact your server via e.g. http. But I'd prefer to do everything via google play, if possible.
3) Note that Google takes a percentage of the in-app purchase cost, so if you refund... will the Google also refund? See Android In-App billing cancel payment
Note also the limit of IIRC 20 goods per request in the API, the example code has a bug related to that limit.
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 have a paid app, I would like to give "codes" for some users to download it for free. Is this possible?
You want to send your "paid app" to some of your users for free, but you don't want it to be distributed out, right?
The best straightforward and non-technical approach is to buy google play gift card by yourself and send them to your selected users.
If you insist on doing this in a technical way, there is no better solution for this case if your application only has a solo paid version on play store. If you have a free version which requires user to buy a premium key or pay through in-app billing to get the paid version, you can do it this way:
Collect google account name of all the users that you want to give the chance for free promotion
Upload a new free version to google play store, in this version, your app will check the google account name of the device (you can use a db file if the number is huge), if it is in the name list, the device can get the premium promotion for free.
This is just a small trick. And it even works if you only have a solo paid version on google playstore. You can send out your application, which will check the account name before it performs the job. But this is not a good idea since user cannot upgrade your app via google play in this way.
I would like to distribute the beta for my Android App to 10,000 specific people that signed up for the prerelease via the Play Store for free. Keeping in mind that the app will eventually be a paid application, is this specificity possible?
If your app has licensing enabled, you can add the people who should get it for free in a "whitelist" with their google play account , so that the app would appear as bought from the market. (i know it is possible but never did it... just google it)
After that you can distribute the apk through email (try http://thebetafamily.com/supersend/ )
and for the previously added accounts the licensing check will pass, and for other users the licensing check will fail if they did not bought the app from market.
This was just a suggestion, never had to do something like this , but thought this might help !
It's not possible. Google Play does not allow paid application to be given away for free (minimum price is ~$1).
You can do it other way:
Publish your application free
For premium features request some in-app payment
Implement in your application some piece of code to unlock premium features to specific users.
I have found a library for it: https://code.google.com/p/remoteunlockerlib/ But not sure if it works at this moment :)