18

I currently have two versions of my app in the Android market, a paid one and a free one. But I want to integrate in-app billing into my free application, and charge customers on a subscription base, for a lower price than the current price of the paid app.

But how should I handle this for existing customers? It seems unfair to let them pay again for use of the paid functionality, while they were the early adopters of my application. Ideally I implement something that will give the existing users access to the unlocked functionality in my free application.

Any ideas of how to accomplish this? An outline of a good approach to take is enough, I don't mind to do some research on how to actually implement such an approach.

ASP
  • 3,645
  • 1
  • 31
  • 45
Jan-Henk
  • 4,864
  • 1
  • 24
  • 38
  • 2
    Did you ever find a solution for this? I'm looking at doing the same thing and need to find a way to give existing paid users the functionality I'm planning to unlock via in-app purchases. I was considering doing something like this (http://stackoverflow.com/questions/2133986/how-to-know-my-android-application-has-been-upgraded-in-order-to-reset-an-alarm) to detect an upgrade vs a clean install, but worry that it would not be as secure as granting existing users the appropriate in-app purchases for free (if that's possible). – Andy Dyer Dec 31 '12 at 03:28
  • I did not find a solution yet. I was thinking about a solution that checks if the paid app is installed on the device, and if so, add an entry to the shared preferences of the updated free app with in-app subscriptions that indicates that the user should have the unlocked functionality of my app. But I haven't spend any time investigating the pros and cons of such a solution yet. – Jan-Henk Jan 07 '13 at 11:05
  • @Jan-Henk Did find solution yet? How did you do it? I'm willing to implement this as well. To share my experience. I bought SwiftKey paid version. Then Swiftkey turned into in app purchase concept. I don't know how they did it but somehow they "know" that I was paid user and let me have 1 theme for free. – stuckedunderflow May 18 '15 at 03:31

5 Answers5

4

Release a separate free version of your app; use the paid version as if it were a license key to the free version.

PackageManager manager = getPackageManager();
if (manager.checkSignatures("old.package.name", "new.package.name")
    == PackageManager.SIGNATURE_MATCH) {
    //full version
}
Dan Fabulich
  • 37,506
  • 41
  • 139
  • 175
  • This is the easiest solution. Genius! – hunterp Nov 14 '13 at 22:40
  • 1
    This is an easy solution, but doesn't it require the users to keep the old paid-for-app installed, even though they're not using it anymore? – Bjarte Aune Olsen Jul 30 '14 at 07:42
  • You could run the check once, if the user has the paid app installed then store that result in persistent storage so that subsequent runs of the free app always run the full version. Once done you could show a dialog to the user telling them to uninstall the paid version. – donturner Jul 15 '15 at 20:38
  • @Dan Fabulich, but doing this will loose all the statistics then. Any better solution? – stuckedunderflow Jan 16 '16 at 15:11
3

You could retain both your paid and your free / IAB versions, but base them both on the same library project so that you'd have only one set of source files to maintain. The library project could unlock all features presently available to your paid users for the paid version (activated, say, by testing the package name of the app), and unlock those same features for the free version only when payment had been made via IAB.

This would also allow you to charge users of the paid version for additional features beyond the ones that were present when they paid for the app, if you were to add some truly significant features in the future and wanted to charge an additional amount for those.

It would also have the advantage that your present paid users would not have to do anything at all; to them it would appear that no change had occurred. In particular, they would not have to install your free / IAB app, or go through any special authorization procedures.

The disadvantage would be that you would have to build and upload two projects for every release. This could, however, be partially automated.

Carl
  • 15,445
  • 5
  • 55
  • 53
  • Just noticed that your question was for 2012! Some of the other answers here are from 2013, so I missed that. Hopefully, you've resolved your issue; perhaps this answer will help somebody else. – Carl Jan 19 '13 at 13:04
1
  • Increment your database version (ex. 34 -> 35)
  • In method SqliteOpenHelper unlock your features for previous users

Example:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
    if(oldVersion != 0 and oldVersion <= 34){
       appConf.unlockAllFeatures()
    }
}
  • If your application doesn't use database yet, do it in onCreate, but notice that onCreate is called on a first database call
ZAN
  • 561
  • 1
  • 4
  • 16
0

Correct me if I understood incorrectly. You have mentioned about subscribing which means user details + database + additional information?

if your app does not have database or anything to hold user records. I would suggest to release an update to paid app and enable sharedpreference or common ini file. use the free app to read the same sharedpreferenece file or your own ini file to read the settings.

going for database will help you in the future for more customer relationship activities.

Krish
  • 5,917
  • 2
  • 14
  • 35
-1

Android dev web site covers this pretty well.

http://developer.android.com/guide/market/billing/index.html

b3bop
  • 3,373
  • 2
  • 17
  • 17
  • 7
    Your link covers how to implement in-app billing, but the main focus of my question is how to migrate users from my existing paid application to the free application where in-app billing will be implemented. I am looking for a solution where these users do not have to pay again. – Jan-Henk Jan 18 '12 at 23:07
  • Android dev site does not cover this use case at all. – donturner Jul 15 '15 at 20:43