iOS中的消耗品与非消耗品

我们是三个人,他们为iPhone提供了一个免费的游戏 ,在App Store上已经有将近一年的时间了。

该应用程序是一个棋盘游戏,您创build一个用户或使用您的Facebook凭据login。 您可以退出游戏并使用其他帐户重新login。

现在我们已经更新了应用程序,可以将用户升级到高级用户。 允许个人和全球游戏统计。

但苹果在审批过程中让我们头痛,并拒绝接受我们的应用内购买。 首先他们不会批准它,因为它没有恢复button。 然后,当我们告诉他们时,不需要恢复button,因为这是一个消耗品购买,他们现在要求我们将其更改为非消耗品,并添加恢复button。

考虑这种情况下,如果购买是非消耗品。

  1. 用户login。
  2. 用户升级帐户到溢价
  3. 用户注销。
  4. 用户使用其他帐户login。
  5. 用户恢复以前的购买。

这将允许您升级两个帐户到溢价,但只有一个购买。

苹果的观点是,我们的用户需要能够恢复购买,如果新的设备被设置,或者设备被恢复。

但这不是它的工作方式。 用户将其帐户升级到高级帐户。 现在,当他们购买新设备或恢复现有设备时,他们只需使用他们现有的游戏帐户login,并且升级将可用,因为我们在服务器端已将该帐户标记为高级帐户。

所以我的问题基本上是。 如果我们select使用消耗品而不是非消耗品,那我们是完全错误的。 如果是这样,一个非消耗品应该如何实现(可能)在不同的游戏账户在同一设备上多次购买?

其次,如果我们对使用消费型应用程序内购买是否正确,我们应该说服苹果说我们走在正确的道路上了?

如果您的高级帐户是您的用户只能购买一次,那么苹果是绝对正确的要求你切换到非消费的应用程序。

你描述的场景是很有可能的(我也必须面对它),但是如果你在解锁高级function(保存与用户关联的所有交易)之前添加应用内收据的服务器端validation,你有机​​会validation购买是新的还是检查收据数据中的字段original_transaction_idoriginal_purchase_date 。 通过这种方式,您可以查看恢复购买的用户是否与最初购买的相同(可能检查其Facebook用户标识)。

无论如何,经验告诉我,发生这种情况的机会并不高,我不会推荐实施这个检查(尽pipe服务器端validation几乎总是必须的;-))

根据“ 应用内购买编程指南 ”的“恢复事务”部分:

如果您的应用程序支持必须是可恢复的产品types,则必须包含允许用户恢复这些购买的界面。

如果您的应用包含非消费品购买,并且您没有包含恢复button,苹果将不会批准您的应用。

这是2012年6月以后苹果所必需的。

所以要回答你的问题:不,看来你必须使用restoreCompletedTransactions

希望它可以帮助你。