通过应用内购买将现有的付费应用程序转换为免费版本

发布于 2024-08-08 12:53:47 字数 280 浏览 3 评论 0原文

我在 App Store 上有付费应用程序的现有用户。我想将该应用程序转换为具有可解锁功能的免费应用程序。有没有办法将我的现有用户转入这个允许付费“升级”的新免费版本,以便现有用户被视为已经为此次升级付费?或者,正如我所期望的那样随着应用程序开发的推进,我们是否必须维护两个独立的代码库 - 而不是通过强迫现有客户再次购买来激怒他们?

我知道这个问题最初可能不会有很多权威答案,因为苹果今天才开始允许在免费应用程序中支持应用内购买......

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...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

顾北清歌寒 2024-08-15 12:53:48

对我来说,维护两个单独的代码库不是一个好的解决方案,因为您将需要维护 2 个应用程序内购买(使用服务器进行应用程序内购买更糟糕),也许 2 个游戏中心,并单独下载(因此更少可见)因为也许一些新用户会直接购买付费应用程序。

但是要将付费应用程序更改为免费应用程序,我没有好的方法来做到这一点,主要原因是如果您升级设备并清理它,您将不会有东西无法向第一批用户提供免费应用程序付出代价,并拥有真正愤怒的用户。

最好的方法是能够询问苹果数据库以了解用户何时购买应用程序或类似的东西。
如果有人知道这样做的技巧,我会很高兴他分享它;)

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 ;)

浪漫人生路 2024-08-15 12:53:48

最可靠的解决方案是进行收据验证。如果您的应用程序没有与之通信的服务器,您可以借助 OpenSSL 在设备上进行通信。 (有关详细信息,请查看有关收据验证的 WWDC 视频。)
关键点是收据有一个属性,可以告诉您用户最初购买您的应用程序的版本。根据此信息,您可以为现有客户解锁功能。

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.

俏︾媚 2024-08-15 12:53:47

有什么方法可以判断您的应用程序以前是否运行过吗? (比如您在退出时写入的设置、创建的数据文件、首次运行的日期戳?)

如果是这样,您可以在升级中添加代码,如下所示:

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
}

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
}
旧城空念 2024-08-15 12:53:47

一种可能的解决方案可能是将代码放置在付费应用程序的新更新中,该代码将翻转您用于识别付费客户的任何开关(无论是在属性列表中还是其他形式)。如果您给现有付费客户足够的时间来升级,他们应该被标记为已付款。然后,将您的付费版本设为免费/付费升级版本,并从商店中删除现有的“Lite”版本。新客户必须使用应用内购买才能解锁完整版本,但现有客户将被视为已付款。

这样做的一个问题是如何让所有现有客户升级到中间版本,及时打开“付费”开关,将应用程序迁移到免费/付费升级模式。

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.

偏闹i 2024-08-15 12:53:47

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

You shouldn't need two separate code bases - use conditional compilation and build two targets.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文