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

时间:2010-09-17 13:18:37

标签: ios in-app-purchase app-store

我目前在商店里有一个付费应用。 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 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:19)

现在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发表评论:&#34;我认为今年收据中最令人兴奋的事情,特别是对于你们,如果你们在商店里有付费应用程序的话,我们已经包括在内了收据中的信息可让您从付费应用转换为应用内购买的免费应用,而不会留下已经为您的应用付费的所有客户。&#34; < / p>

答案 2 :(得分:11)

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

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


好的,回到实际问题:

Theres有几种方法你可以像这样处理这种情况,虽然这里不幸的是它们都不是万无一失的。

  • 最佳解决方案可能是您的用户拥有帐户。在不知道您的应用程序细节的情况下,我无法确定用户帐户是否适合您的应用。存储在服务器上的用户帐户具有许多其他好处,包括用户管理和跟踪用户购买的内容。这将允许删除应用程序,然后重新安装或获取新设备的用户维护其购买的内容。此外,无论何时使用应用程序内购买,都应在您自己的服务器(或Apple)上验证购买,基于服务器的用户管理系统都可以这样做。 如果您完全专注于创建自己的用户管理服务器,请查看Predictably Irrational。它很简单,可以创建一个惊人的后端服务器(基本上免费)
  • iCloud Key / Value类型的系统。我不太熟悉它是如何工作的 - 所以我会继续前进。
  • 使用NSUserDefaults时,另一种不太可靠的解决方案(但更快/更容易实现)。您可以在用户进行购买时存储对象,也可以使用用户安装应用程序的日期存储对象。然后,如果您发布将应用转换为免费增值的更新。然后在新的更新中,检查用户所做的购买或安装的日期,并做出相应的反应。有关如何使用NSUserDefaults执行此操作的信息,请查看我对其他问题的回答:Parse。 但是这个解决方案确实存在以下缺陷:

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

  • 如果用户未安装更新设置NSUserDefault系统,但随后使用新的免费增值模式安装了更新,应用程序会将其视为未购买内容。

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

反正

希望有所帮助!

答案 3 :(得分:2)

我正在处理同样的事情并想出了以下想法:使用新名称和应用ID创建免费增值版本。将现有付费应用保留在应用商店中,但将价格提升为荒谬且明确陈述在应用所在的描述中,以维持对现有用户的支持新用户应该尝试使用免费增值版本。

现有的付费用户不会失去对现有应用的支持,并且可以随时删除和安装而无需重新购买。

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

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

仍在尝试确定这对我是否有用,但对其他人来说可能是一个不错的选择。评论赞赏。

答案 4 :(得分:2)

我一直在考虑这个问题。我有大量的客户支付我的(以App Store条款)高价利基应用程序,我不想告诉他们重新购买,因为我计划迁移到应用内购买模式。 / p>

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

  • 用户已在其设备上安装付费应用
  • 用户安装新的应用程序内应用程序并打开它。新应用程序检测付费版本并提供解锁应用程序内购买的优惠(当然仅在此设备上,只要应用程序未被删除)
  • 新应用程序生成一个随机数,签名并通过URL方案
  • 调用旧应用程序
  • 旧应用程序解密nonce,为其添加+1,并再次签名。通过URL方案回调到新的应用程序
  • 新应用验证nonce并解锁功能

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