22

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

我知道最初不会有很多权威的答案来回答这个问题,因为 Apple 直到今天才开始允许从免费应用程序中支持应用内购买......

4

5 回答 5

6

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

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

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
}
于 2009-10-16T05:41:44.507 回答
5

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

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

于 2009-10-16T01:47:03.663 回答
2

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

于 2009-10-16T01:32:05.587 回答
2

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

但是要将付费应用程序更改为免费应用程序,我没有好办法,因为主要原因是如果您升级设备,然后清理它,您将没有什么可以不向第一批用户提供免费应用程序支付它,并有真正愤怒的用户。

最好的方法是能够让苹果数据库知道用户何时购买应用程序或类似的东西。如果有人知道这样做的技巧,我会喜欢他分享的;)

于 2011-04-20T08:41:02.817 回答
1

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

于 2018-10-19T00:05:42.333 回答