首页 文章

通过应用内购买将现有iOS付费应用转换为免费增值模式

提问于
浏览
45

我目前在商店里有一个付费应用程序 . Apple还没有允许提交'lite'版本,因此我别无选择,只能将当前的付费版本更新为免费增值(在应用内购买)模式 . 我有一个问题,即第一次购买应用程序的v1用户不会失去功能 .

有没有办法确定应用程序是否已从以前安装的版本更新,以便我可以解锁应用程序的付费部分?

两个相似的问题(几个月前):

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

iPhone + upgrade existing paid application on app store to free application with In App purchase + what about the customers who have already purchased the paid application

5 回答

  • 11

    使用iOS7,iOS应用程序可以验证应用商店收据,其中包含应用下载日期 . 通过使用此下载日期,您可以确定客户以前是否购买过

  • 2

    现在有一种Apple批准的方法可以在iOS和macOS上执行此操作 . 可以使用信息键 Original Purchased Version 从收据中获取最初下载的应用版本 . 然后,如果该版本早于切换到IAP,则可以决定是否解锁功能 .

    例如,一旦您检索到收据信息:

    NSArray *versionsSoldWithoutIAP = @[@"1.0", @"1.1", @"1.2", @"1.3"];
    NSString *originalPurchasedVersion = [receiptInfoDict objectForKey:@"Original Purchased Version"];
    for (NSString *version in versionsSoldWithoutIAP) {
        if ([version isEqualToString:originalPurchasedVersion]) {
            // user paid for the currently installed version
        }
    }
    

    有关详细信息,请参阅WWDC 13视频Using Receipts to Protect Your Digital Sales . 主持人在5:40发表评论:"I think the most exciting thing that's in the receipt this year, especially for you guys if you have a paid app in the store is that we've included information in the receipt that's going to let you do a transition from being a paid app to being a free app with in-app purchases without leaving behind all the customers that have already paid for your app."

  • 19

    首先,我只想说我个人认为免费增值模式很棒 . 对于许多开发人员来说,它已经很好地解决了.2671675_ . 人们喜欢下载免费的应用程序,并会随心所欲地做到这一点,但在花费0.99美元之前更加关注应用程序(这是由于免费的影响 - 有关更多信息,请查看Dan Ariely的书Predictably Irrational

    有关免费增值的更多信息,请谷歌 - 有大量关于它成功的文章 .


    好的,回到实际问题:

    有几种方法你可以像这样处理这种情况,虽然不幸的是这里没有一个是傻瓜证明 .

    • 最好的解决方案可能是您的用户拥有帐户 . 在不知道您的应用程序细节的情况下,我无法确定用户帐户是否适合您的应用 . 存储在服务器上的用户帐户具有许多其他好处,包括用户管理和跟踪用户购买的内容 . 这将允许删除应用程序,然后重新安装或获取新设备的用户维护其购买的内容 . 更糟糕的是,无论何时使用应用程序内购买,您都应该在自己的服务器(或Apple)上验证购买,基于服务器的用户管理系统都可以这样做 . If your totally in over your head with creating your own user management server, check out Parse. Its dead simple to create an amazing backend server (for basically free)

    • iCloud Key / Value类型的系统 . 我继续前进 .

    • 另一个,不是几乎是万无一失的解决方案(但更快/更容易实现)是使用 NSUserDefaults . 您可以在用户进行购买时存储对象,也可以使用用户安装应用程序的日期存储对象 . 然后,如果您发布将应用转换为免费增值的更新 . 然后在新的更新中,检查用户所做的购买或安装的日期,并做出相应的反应 . 有关如何使用 NSUserDefaults 执行此操作的信息,请查看我对其他问题的回答:NSUserDefaults and app versions . 但是这个解决方案确实存在以下缺陷:

    • 如果用户删除了您的应用, NSUserDefaults 将永远丢失

    • 如果用户没有购买内容 .

    总而言之,这是一个难题,没有很多简单/完美的选择 .

    无论如何,

    希望有所帮助!

  • 20

    我正在处理同样的事情并想出了以下想法:使用新名称和应用程序ID创建免费增值版本 . 将现有的付费应用保留在应用商店中,但在应用程序所在的描述中保持 raise the price 以保持对现有用户的支持,并且新用户应该尝试使用免费增值版本 .

    现有的付费用户不会失去对现有应用的支持,并且可以在不重新购买的情况下随时删除和安装 .

    您也不必继续更新旧的付费应用程序 . 只需将其保存在应用商店中即可 .

    缺点是现有的付费用户将无法顺利迁移到免费增值版本,以获得您未来添加的任何额外功能,而无需重新支付他们已有的功能 .

    仍然试图决定这是否适合我,但它可能是其他人的一个很好的选择 . 评论赞赏 .

  • 2

    我一直在思考这个问题已有一段时间了 . 我有大量的客户支付我的(在App Store条款)高价利基应用程序,我不想告诉他们我计划迁移到应用程序内购买模型时重新购买 .

    我提出的想法(我会问苹果支持它是否合法)是逐步淘汰当前付费的应用程序,但是发布了它的最新更新,允许“解锁”新应用程序的应用内购买基于应用内模型 . 我正在考虑挑战响应计划:

    • 用户已在其设备上安装了付费应用

    • 用户安装新的应用程序内应用程序并打开它 . 新应用程序检测付费版本并提供解锁应用程序内购买的优惠(当然仅在此设备上,只要应用程序未被删除)

    • 新应用程序生成一个随机数,签名并通过URL方案用它调用旧的应用程序

    • 旧应用程序解密nonce,将1加1并再次签名 . 通过URL方案回调到新的App

    • 新应用程序验证nonce并解锁功能

    可以使用预共享密钥轻松实现该方案 . 这当然是监狱设备的弱点,但是每个存储应用程序内收据的应用程序都存在这些问题 .

相关问题