Syntax
Syntax

Reputation: 2197

Make existing Android app freemium, unfair to existing customers

Does anyone know if it is possible to take an existing Android app (Paid) with ~500 paying customers and convert to a Freemium model without causing the members to pay again when upgrading from within the store? Yes/No answer with evidence sought

The only way I could think of doing this was to create a new app in the store, halting development on the existing app and turning it into a key-app of sorts that behaves like an alternate unlock for the new Freemium app; e.g.

if (existing app is installed || purchase exists in in app billing receipts) {
     // Unlock premium value
}

Existing users would then be directed at the new app to download and install, but would be required to keep the key app (first app) installed to avoid having to pay?

Upvotes: 3

Views: 1032

Answers (2)

Alon Zilberman
Alon Zilberman

Reputation: 2155

I think there are few ways to do it. First of all the main challenge is to determine if user already paid for app. When you will know it you will be able to put some if to your Application class which will turn on premium option for users who already paid for app. Example:

public class MySingltone extends Application {
    @Override
public void onCreate() {
 if(alreadyPaid)
   //Turn on premium stuff
 }
}

Ok. Now about ways to determine if user already paid for your app:

  1. Maybe you have some SharedPreferences or settings which you create after user installs the app, so you will be able to check if it exist -> app was installed before-> user paid for it. Just add some flag after this check, because on the second launch all users will be "old users". So make this check only once per user.
  2. If you don't have such things you can put to Google Play update for your app, which will just put to SharedPreferences boolean wasInstalled=true. So after everybody update their apps, you will be able to determine old users by if(isFirstLaunch==true). Just don't forget to make one more update which will remove adding boolean wasInstalled=true before making your app freemium.
  3. You can copy emails of all users who bought your app (from Google Play walt) to file. And then in if(alreadyPaid) check if current device email exist in this list->user bought app. (you will need to add permission to manifest for getting users email)

Upvotes: 1

Jose L Ugia
Jose L Ugia

Reputation: 6250

There's a way to do that as long as you abstract the state of your app from the purchasing state of any consumable, subscription or in general any in-app product you may have. Let's get through with an example.

Let's say my app shows pictures of fruits and free customers can see pears and bananas, whereas freemium can additionally see strawberries and lemons on top. Since you have to different ways of recognising users as premium (existing users who paid already + new users who buy through in-app products, you need a system/state which is agnostic to that).

1. Flagging premium state

Simplest idea would be to have a flag isPro/proState saved on your disk (SharedPreferences, SQLiteDatabase, other) but that would make it easy for users with rooted devices to access your premium features. Solutions are multiple here and it's more up to you, but if you already have any central place or server where your users live, there's not better place to do so for persisting users' pro state. However if you are not using SSL you may want to do some hashing on top to communicate between server and client. Ultimately and if that's not crucial to you don't bother much. First, you won't get many fake pros and second you can be happy that they take the time to try to "crack" your premium accounts and spread the word about how cool your strawberries and lemons are.

2. Converting existing users to a premium state

If I didn't get it wrong, your existing users already paid for your app, I guess that means you want to set them as premium users right away. Here it's all about tracking users' current version, there are some ways to do that:

(listed from most to least ideal)

  • If you already keep record of users' current version either on your server or persist it locally you have it done. Just check last and current version and update user's premium state. Note: If you are not doing that yet it might be a good moment to think about it. Persisting users' current version brings a lot of benefits (analytics, new feature highlight, migrations, etc) and takes away a lot of hassle from you (support, the problem you are facing, etc).

  • If you don't, but you are using persistence in SQLite you could use update the version of your database model and make use of onUpgrade method to know if a given user comes from the old version or if it's a new user, although that one is a bit hacky to my eyes.

  • As a last bullet, in general users leave traces when they use your app, if you have any way to resolve that (check for existing database, check for pre-set keys on SharedPreferences, cookies, etc) you could know if a user comes from an older version or not.

Hope it helps.

Upvotes: 0

Related Questions