我目前在商店里有一个付费应用。 Apple还没有允许提交'lite'版本,因此我别无选择,只能将当前的付费版本更新为免费增值(在应用内购买)模式。我有一个问题,即第一次购买应用程序的v1用户不会失去功能。
有没有办法确定应用程序是否已从之前安装的版本更新,以便我可以解锁应用程序的付费部分?
两个类似的问题(几个月前):
Transition an existing paid for app to free version with In App Purchase
答案 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有几种方法你可以像这样处理这种情况,虽然这里不幸的是它们都不是万无一失的。
使用NSUserDefaults
时,另一种不太可靠的解决方案(但更快/更容易实现)。您可以在用户进行购买时存储对象,也可以使用用户安装应用程序的日期存储对象。然后,如果您发布将应用转换为免费增值的更新。然后在新的更新中,检查用户所做的购买或安装的日期,并做出相应的反应。有关如何使用NSUserDefaults
执行此操作的信息,请查看我对其他问题的回答:Parse。
但是这个解决方案确实存在以下缺陷:
如果用户删除了您的应用,NSUserDefaults
将永久丢失
总之,这是一个难题,没有很多简单/完美的选择。
反正
希望有所帮助!
答案 3 :(得分:2)
我正在处理同样的事情并想出了以下想法:使用新名称和应用ID创建免费增值版本。将现有付费应用保留在应用商店中,但将价格提升为荒谬且明确陈述在应用所在的描述中,以维持对现有用户的支持新用户应该尝试使用免费增值版本。
现有的付费用户不会失去对现有应用的支持,并且可以随时删除和安装而无需重新购买。
您也不必继续更新旧的付费应用。只需将其保存在应用程序商店中即可。
缺点是现有的付费用户将无法顺利迁移到免费增值版本,以获得您未来添加的任何额外功能,而无需重新支付他们已有的功能。
仍在尝试确定这对我是否有用,但对其他人来说可能是一个不错的选择。评论赞赏。
答案 4 :(得分:2)
我一直在考虑这个问题。我有大量的客户支付我的(以App Store条款)高价利基应用程序,我不想告诉他们重新购买,因为我计划迁移到应用内购买模式。 / p>
我提出的想法(我会问苹果支持它是否合法)是逐步淘汰当前付费的应用程序,但发布最后一次更新,允许“解锁”新应用程序的应用内购买基于In-App模型。我正在考虑挑战响应计划:
使用预共享密钥可以轻松实现该方案。这当然是监狱设备的弱点,但是每个存储应用程序内收据的应用程序都存在这些问题。