Iphone iOS中的耗材与非耗材

Iphone iOS中的耗材与非耗材,iphone,ios,in-app-purchase,appstore-approval,Iphone,Ios,In App Purchase,Appstore Approval,我们是三个人,他们为iPhone制作了一个新的应用程序,这个应用程序已经在应用程序商店上发布了将近一年 该应用程序是一款棋盘游戏,您可以使用Facebook凭据创建用户或登录。您可以退出游戏并使用其他帐户重新登录 现在,我们已经更新了应用程序,能够将用户升级为高级用户。允许个人和全球游戏统计 但苹果在审批过程中让我们头疼,拒绝接受我们的应用内购买。首先,他们不会批准它,因为它没有恢复按钮。然后,当我们告诉他们,恢复按钮不是必需的,因为这是一个消耗品购买,他们现在要求我们将其更改为非消耗品,并添加

我们是三个人,他们为iPhone制作了一个新的应用程序,这个应用程序已经在应用程序商店上发布了将近一年

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

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

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

如果购买是非消耗品,请考虑此场景

  • 用户登录
  • 用户将帐户升级到“特优”
  • 用户注销
  • 用户使用其他帐户登录
  • 用户恢复以前的购买
  • 这将允许您将两个帐户升级到premium,但只需一次购买

    苹果的论点是,如果安装了新设备或设备被恢复,我们的用户需要能够恢复购买

    但事实并非如此。用户将其帐户升级为高级帐户。现在,当他们购买新设备或恢复现有设备时,他们只需使用其现有游戏帐户登录,升级即可,因为我们在服务器端已将该帐户标记为高级帐户

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


    其次,如果我们对应用程序内消费品的使用是正确的,我们应该说什么来说服苹果,我们走在正确的道路上?

    根据

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

    如果你的应用程序包含非消费品购买,并且如果你没有包含恢复按钮,苹果将不会批准你的应用程序

    这是苹果在2012年6月后做出的必要决定

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


    希望它对您有所帮助。

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

    您描述的场景非常可能(我也不得不面对),但如果您在解锁premium功能(保存与用户关联的所有事务)之前添加应用内收据的服务器端验证您有机会通过检查收据数据中的
    original\u transaction\u id
    original\u purchase\u date
    字段来验证购买是新的还是恢复的。通过这种方式,您可以查看恢复购买的用户是否与最初购买的用户相同(可能是检查其facebook用户id)


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

    谢谢您的回答。我实现了这个,它成功了。当用户使用其他用户恢复购买时,它现在会说,该购买属于其他帐户。但是如果用户按下“购买”,应用商店将允许其再次“下载”,但免费。我想,关键是要确定高级功能的“所有者”是您的用户还是apple id帐户。我认为,通常可以放心地说,它与apple id帐户链接,因为购买是与apple一起进行的(这就是为什么我声明我没有在我的项目中实施此检查)。最后,是的,您可以将使用一个apple id进行的购买恢复到多个用户帐户,但这种情况并不常见。如何仅向您在服务器端标记为“专业用户”的用户显示恢复按钮?