iOS中的耗材与非耗材

时间:2013-04-20 08:38:55

标签: iphone ios in-app-purchase appstore-approval

我们是三个人,为iPhone制作了free game,已经在App Store上推出了近一年。

该应用程序是一款棋盘游戏,您可以使用Facebook凭据创建用户或登录。您可以退出游戏并使用其他帐户重新登录。

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

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

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

  1. 用户登录。
  2. 用户将帐户升级为高级帐号
  3. 用户退出。
  4. 用户使用其他帐户登录。
  5. 用户恢复上一次购买。
  6. 这样您就可以将两个帐户升级为高级帐户,但只需购买一次。

    Apple认为,如果设置了新设备或设备已恢复,我们的用户需要能够恢复购买。

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

    所以我的问题基本上就是。当我们选择使用消耗品而不是非消耗品时,我们完全错了。如果是这样,为了(可能)在同一台设备上使用不同的游戏帐户多次购买非耗材,应如何实施?

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

2 个答案:

答案 0 :(得分:4)

如果您的高级帐户是您的用户必须只购买一次,那么Apple绝对有权要求您切换到非消费类应用程序。

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

无论如何,经验告诉我发生这种情况的可能性并不高,我不建议实施这项检查(尽管服务器端验证几乎总是必须的;-))

答案 1 :(得分:2)

根据In-App Purchase Programming Guide:

的“恢复交易”部分

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

如果您的应用包含非消耗品购买,并且如果您不包含恢复按钮,那么Apple将不会批准您的应用。

2012年6月之后,苹果已经将此作为必要。

所以回答你的问题:不,似乎你必须使用restoreCompletedTransactions

希望它对你有所帮助。