简体   繁体   中英

Transition an existing paid for app to free version with In App Purchase

I have existing users of a paid for app on the App Store. I'd like to transition the app to a free app with unlock-able features. Is there a way to roll my existing users into this new free version that allows a paid "upgrade" so the existing users are treated as if they've already paid for this upgrade? OR, as I expect, must we maintain two separate code bases as app development moves forward - in lieu of angering our existing customers by forcing them to purchase again?

I'm aware that initially there prolly won't be many authoritative answers to this question as Apple has only today started allowing support for In-App Purchases from within free apps...

One possible solution might be to place code in a new update of your paid application that would flip whatever switch you'd use to identify paid customers (be it in a property list or other form). If you give your existing paid customers enough time to upgrade, they should be marked as having paid. Then, make your paid version the free / paid upgrade version and remove your existing "Lite" version from the store. New customers will have to use the in-app purchase to unlock the full version, but existing customers will be acknowledged as having already paid.

A problem with this is how to get all of your existing customers to upgrade to the intermediate version that flips the "paid" switch in time to migrate the application to the free / paid upgrade model.

is there's some way you can tell if your app has been run before? (like settings you write on exit, data files created, date stamp of first run?)

if so, you could put code in your upgrade like:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (nil == [defaults objectForKey:@"app_v2_has_been_run"]) {
    if (nil == [defaults objectForKey:@"some_key_v1_makes"] {
         // they never had v1 of your app
    } else {
         // they had v1 of your app, so unlock some stuff for them
    }
    [defaults setObject:[NSDate date] forKey:@"app_v2_has_been_run"]; // or whatever
}

您不应该需要两个单独的代码库 - 使用条件编译并构建两个目标。

For me, maintain two separate code bases won't be a good solution, because you will need to maintain 2 in app purchase (worse with in app purchase with a server), maybe 2 game center, and separate your download (and so less visible) because maybe some new user will directly buy the pay app.

But to change pay app to free app, I have no good way to do it, for the main reason if you upgrade your device, and so clean it, you won't have something to don't get free app to the first users to pay for it, and to have really angry users.

The best way will be to be able to ask an apple database to know when the user buy the application or something like that. If someone know a tricks to do that, I will love he shares it ;)

The most robust solution is to do receipt validation. If you do not have a server that your app is communicating with, you can do it on the device with the help of OpenSSL. (Check the WWDC videos on receipt validation for details.) The key point is that the receipt has an attribute that tells you at which version the user has originally purchased your app. Based on this information you can then unlock features for existing customers.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM