I have an Android app with free and paid versions, where the free version has a time limit, after which it redirects users to the Market to buy the paid version. The two versions have different package names and are submitted to the Market as separate applications.
However, when users buy the paid version, this doesn't replace the free version - they're left with both versions installed at once. I'd like it to install over the free version. Ideally it would also replace any existing shortcuts on the home screen with shortcuts to the new version, but that's less important.
Is there an elegant way to handle this?
You can't have the free version automatically deleted when a user buys the paid one. Only the user of the device can uninstall applications from the phone, and he must do so manually.
If the two icons thing really bothers you, you could always switch to a free version model only, using in-app billing to unlock features or contents in your app.
A popular way to handle this situation is to only release one fully-functional package.
Put all of the functionality into the "free" version, and then release a "Pro Key" which is just an empty package. Then you can add a function to the free version which checks whether the Pro Key is installed. You can then use this function to selectively unlock certain features of the application.
See How can I use the paid version of my app as a "key" to the free version? and Detect if app was downloaded from Android Market for more info about this process.
Related
I've already made two different Android projects and they have different package names. They're identical except in the Main Activity where the free version expires after 7 days whereas the paid version checks for a purchase license.
What I want is that when a user installs the paid version then the free version on their device (if it exists) gets replaced by the paid version and also all the user's saved SharedPreferences from the free version move over to the paid version. Is this possible? Or will the user have to uninstall the free version as well as lose all their saved settings?
I read questions related to this and they all talk about using ProductFlavors to create different build variants, but I'm not sure if the purpose of this is just to make the work easier for devs or if it helps in what I'm trying to do.
Yes, if make it like update, replacing old app with new one.
Actually, I have 2 apps : free and paid (pro version).
I would like to migrate my 2 apps to a free app with an in-app-purchases.
Can I save all the people how have paid the pro version in my in-app-purchases ?
What is the best way to do that ?
This has to be handled logically.
1) Simply launch the in- app purchase version of App for everyone.
2) Put a simple check whether user has paid the pro version already (must be somewhere saved on your server side)
If Yes - allow him the in app purchase benefits
Else They will be shown In App purchase options.
What you could do as a workaround is to make an update to the pro version to remove all functionality and use it as a “unlock app” for the pro functions in your free app by checking if the old “pro app” exists for legacy users. This way you don’t have to migrate anything. The old users are this way still able to reinstall the old app and use it as an unlock app. The downside of this is that the old PRO app could still be purchased.
EDIT: This has actually been done before. SD Maid uses this as their main way of getting the pro version of the app.
Link to google play: https://play.google.com/store/apps/details?id=eu.thedarken.sdm&hl=nl
Actually, I have 2 apps : free and paid (pro version). I would like to
migrate my 2 apps to a free app with an in-app-purchases.
Can I save all the people how have paid the pro version in my
in-app-purchases ? What is the best way to do that ?
There are number of ways with prons and cons:
1)You can manage with two app and at Free app show Pro version features and If user want Pro Features then move to play store for download.
So due to this you will no loss Free app users.
2)single app with Pro Version so no need to manage both apps.
I want to know the best scenario about what is happening when we have 2 versions from one application and the user at the first time only will install free version and then if he wants to use the paid features in the app it will automatically redirect user to download paid version and uninstall the free version from device ( automatically ) , this scenario is possible if we want have one version from app at all time in Android and IOS? OR what is the possible scenario in this case?
The most common model for a free/paid version of an app is to have just one app which is free to download, and make premium features available to a user by purchasing the app using In App Purchases.
This allows you to track user statistics and provide updates in just one place.
If you absolutely must have two versions of the app, you can direct the user to the play store to buy the premium version but it will be their responsibility to uninstall the free version if they no longer want it.
I'm having two versions of my app. Free and Pro. I'm going to remove the free version and change status of the Pro version from paid to free and use in app billing to unlock advanced features instead of having two different apps. Users already paid should start off with all features enabled.
Is there a way to check if a user has purchased the app after changing it to free?
From what I have read, LVL can't do this.
Is it possible with IAB v3?
There are several postsbelow here on StackOverflow concerning this topic. The short answer is that there's no fool-proof way to do it.
Some possibilities:
Check for some prexisting object exclusively from the Pro Version(db, pref, etc)
This won't work for new devices, only if it's a simple upgrade on an existing install
Use the old Pro app itself as the "key" to unlock(check PackageManager)
Suffers from the same problem as above, and even uglier
Create a unique id for each Pro customer, save it server-side and check on startup
Necessitates internet access for validation, not very secure, users hate data collection
A hybrid of more than one method would probably work best, but it depends highly on the implementation. No matter what you come up with, there will be some issues, and I don't think there's a way to 100% cover every existing customer.
How to migrate from a paid android application to an application paid for with in-app billing?
Converting an Android application from a free/paid model to in-app paid unlocking
Changing paid Android App to free with In App Billing - grandfathering existing customers
How can I use the paid version of my app as a "key" to the free version?
Here is the context.
I want to have a free version and a premium version of the same application. When people buy the application, I want them to be able to "upgrade" without losing their data, i.e. the premium version should install over the free version.
I want to use the same code base and just switch a setting to build the premium version.
Andoid Market does not let me convert a free app to a paid app, so the trivial option is not available.
I am curious if someone has tried this successfully. How does Android Market identify an application - will it think that the premium version is a different app and just install it in parallel?
The answer is: this is not solvable with Android Market, because Market does not allow the upload of two apps with the same package name. Android cannot be tricked into installing the premium version over the free version and treat it as an upgrade.
The good news: adding database backup/restore functionality (copying the database to the SD card and back to the app folder) only required a few lines of code. My users will have to install both versions in parallel, back up the database from the free version and restore it to the premium version.
Instead of backing up the database to and from the SD card (as suggested by #cdonner), which requires the WRITE_EXTERNAL_STORAGE permission, the free app can expose a ContentProvider, which the paid app can use to transfer data.
Be sure to use permissions to secure your content.
My idea is the following:
Paid version's android:versionCode should be free's android:versionCode +1
Both should have the same package.
When paid version is installed, it will replace the free one.
Actually it will update it, since it has a higher android:versionCode.
As both have the same package, they will be placed in the same folder ( /data/data/your.package) so the paid app will be able to access the free app db.