我目前在商店里有一个付费应用程序 . Apple还没有允许提交'lite'版本,因此我别无选择,只能将当前的付费版本更新为免费增值(在应用内购买)模式 . 我有一个问题,即第一次购买应用程序的v1用户不会失去功能 .
有没有办法确定应用程序是否已从以前安装的版本更新,以便我可以解锁应用程序的付费部分?
两个相似的问题(几个月前):
Transition an existing paid for app to free version with In App Purchase
我目前在商店里有一个付费应用程序 . Apple还没有允许提交'lite'版本,因此我别无选择,只能将当前的付费版本更新为免费增值(在应用内购买)模式 . 我有一个问题,即第一次购买应用程序的v1用户不会失去功能 .
有没有办法确定应用程序是否已从以前安装的版本更新,以便我可以解锁应用程序的付费部分?
两个相似的问题(几个月前):
Transition an existing paid for app to free version with In App Purchase
5 回答
使用iOS7,iOS应用程序可以验证应用商店收据,其中包含应用下载日期 . 通过使用此下载日期,您可以确定客户以前是否购买过
现在有一种Apple批准的方法可以在iOS和macOS上执行此操作 . 可以使用信息键
Original Purchased Version
从收据中获取最初下载的应用版本 . 然后,如果该版本早于切换到IAP,则可以决定是否解锁功能 .例如,一旦您检索到收据信息:
有关详细信息,请参阅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."
首先,我只想说我个人认为免费增值模式很棒 . 对于许多开发人员来说,它已经很好地解决了.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
将永远丢失如果用户没有购买内容 .
总而言之,这是一个难题,没有很多简单/完美的选择 .
无论如何,
希望有所帮助!
我正在处理同样的事情并想出了以下想法:使用新名称和应用程序ID创建免费增值版本 . 将现有的付费应用保留在应用商店中,但在应用程序所在的描述中保持 raise the price 以保持对现有用户的支持,并且新用户应该尝试使用免费增值版本 .
现有的付费用户不会失去对现有应用的支持,并且可以在不重新购买的情况下随时删除和安装 .
您也不必继续更新旧的付费应用程序 . 只需将其保存在应用商店中即可 .
缺点是现有的付费用户将无法顺利迁移到免费增值版本,以获得您未来添加的任何额外功能,而无需重新支付他们已有的功能 .
仍然试图决定这是否适合我,但它可能是其他人的一个很好的选择 . 评论赞赏 .
我一直在思考这个问题已有一段时间了 . 我有大量的客户支付我的(在App Store条款)高价利基应用程序,我不想告诉他们我计划迁移到应用程序内购买模型时重新购买 .
我提出的想法(我会问苹果支持它是否合法)是逐步淘汰当前付费的应用程序,但是发布了它的最新更新,允许“解锁”新应用程序的应用内购买基于应用内模型 . 我正在考虑挑战响应计划:
用户已在其设备上安装了付费应用
用户安装新的应用程序内应用程序并打开它 . 新应用程序检测付费版本并提供解锁应用程序内购买的优惠(当然仅在此设备上,只要应用程序未被删除)
新应用程序生成一个随机数,签名并通过URL方案用它调用旧的应用程序
旧应用程序解密nonce,将1加1并再次签名 . 通过URL方案回调到新的App
新应用程序验证nonce并解锁功能
可以使用预共享密钥轻松实现该方案 . 这当然是监狱设备的弱点,但是每个存储应用程序内收据的应用程序都存在这些问题 .