使用In App Purchase将现有付费应用转换为免费版

Mel*_*emi 21 iphone in-app-purchase

我已经在App Store上拥有付费应用的用户.我想将应用转换为具有可解锁功能的免费应用.有没有办法将现有用户推送到这个允许付费"升级"的新免费版本,以便将现有用户视为已经为此次升级付费?或者,正如我所料,随着应用程序开发的推进,我们必须保持两个独立的代码库 - 而不是通过强迫他们再次购买来激怒现有客户吗?

我知道,由于Apple今天才开始允许在免费应用程序中支持应用内购买,因此最初不会有很多权威性的答案.

Bra*_*son 5

一种可能的解决方案可能是将代码放入付费应用程序的新更新中,该更新将翻转您用于识别付费客户的任何交换机(无论是在财产列表中还是其他形式).如果您为现有付费客户提供足够的升级时间,则应将其标记为已付款.然后,将您的付费版本设为免费/付费升级版本,并从商店中删除现有的"精简版"版本.新客户必须使用应用内购买来解锁完整版本,但现有客户将被确认为已付款.

这样做的一个问题是如何让所有现有客户升级到中间版本,以便及时翻转"付费"交换机,将应用程序迁移到免费/付费升级模型.

  • 我想到了这一点,但意识到如果有人删除了你的应用程序并重新安装它,他们将恢复到"精简"版本.也许这种情况很少发生,但如果发生在我身上,我会很生气. (4认同)

Dav*_*des 5

是否有一些方法可以判断您的应用程序之前是否已经运行过?(比如你在退出时写的设置,创建的数据文件,首次运行的日期戳?)

如果是这样,您可以将代码放入升级中,如:

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
}
Run Code Online (Sandbox Code Playgroud)


Cad*_*oux 2

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

  • 我想补充一点,并使其成为一个营销机会 - 使用一个代码库和两个输出,但为直接购买该应用程序的人提供某种甚至无法从免费版本中解锁的闪亮或特殊功能。这会让已经购买的人感到自己很特别,而不是突然成为不想要的继子。 (2认同)