【问题标题】:Maintaining records of iOS in-app-purchases维护 iOS 应用内购买记录
【发布时间】:2012-10-29 20:57:59
【问题描述】:

我已实施 IAP,其中一次性购买可解锁应用中的某些功能。由于每个用户只进行一次购买,因此我可以询问 Apple 的 IAP 服务是否该用户进行了购买。如果是这样,则解锁该功能。如果没有,则显示 IAP 提示。我可能还在用户默认值中保留了一些“userDidMakePurchase”标志,作为使用没有网络连接的应用程序的不完美解决方案。

现在我想实现一个 IAP,用户可以在其中反复进行。每次用户获得十个代币以使用应用内货币。 如何确定特定用户在启动应用时拥有的令牌数量?

到目前为止,我已经考虑在用户默认值中保留令牌计数。这有一些主要缺点,例如删除和重新安装应用程序会清除用户的代币余额。令牌也不会转移到其他设备上。

当然,我可以将令牌计数保存在我自己的服务器上或使用 AWS。但是,如果可能的话,我想避免这种情况。我只熟悉 IAP 基础知识,所以也许 Apple 会跟踪所有购买,我可以从那里弄清楚。

【问题讨论】:

  • “当然,我可以将令牌计数保存在我自己的服务器上或使用 AWS。但是,如果可能的话,我想避免这种情况。”您能详细说明为什么要避免这种情况吗?

标签: ios in-app-purchase


【解决方案1】:

从“一次购买,永久使用”切换到“多次购买,持续使用”使您的购买成为 Apple 术语中的消耗品。由于 Apple 不会为您存储消耗品购买的状态,因此跟踪资源消耗的任务完全取决于您的应用程序。

一般来说,您可以使用四个位置来存储剩余计数:

------------------------------------------------------------------
|      Storage     | Offline? | Reinstall? | Encrypted? | Large? |
------------------------------------------------------------------
| Documents Folder |    YES   |     NO     |     NO     |   YES  |
| iCloud           |     NO   |     YES    |     NO     |   YES  |
| User Defaults    |    YES   |     NO     |     NO     |   NO   |
| Keychain         |    YES   |     YES    |     YES    |   NO   |
------------------------------------------------------------------

由于您需要存储少量数据,因此您的理想人选是 Keychain:它可以离线工作,可以在重新安装后继续使用,而且它还经过加密。

虽然钥匙链CF API 周围没有内置的NS 包装器,Apple 还是为它提供了一个很好的包装器published(滚动到页面底部以查看代码)。将安全框架添加到您的解决方案中,将包装代码复制粘贴到您的项目中(它只有两个文件)。现在您可以像使用NSDictionary 一样使用钥匙串。

【讨论】:

  • 非常感谢您提供的信息!钥匙串在某些方面听起来很有希望。但是我不确定它是否解决了多设备问题。钥匙串数据不是跨设备同步的吗?
  • @SundayMonday 不幸的是,跨设备共享消耗品是一项极其棘手的任务,需要(除其他外)支持事务更新。 Apple 通过免除共享要求的消耗品间接承认在其应用内购买指南中正确处理它的棘手:“消耗品是您的内容在所有用户设备上可用的要求的一个例外。消耗品是数字物品用完或用完后消失,永远不能重复使用。”
  • @SundayMonday 如果必须实现共享,很可能需要使用server product model,这要复杂得多。
  • +1 这很有趣。我想知道是否可以通过谨慎播放来大大简化问题。也就是说,如果用户在他们的手机上购买了 100 个硬币,那么这 100 个硬币也可以在他们的 iPad 上使用,除非你可以可靠地证明用户在 iPhone 上花费了 80 个硬币。在这种情况下,用户在 iPad 上只有 20 个硬币可用。因此,“与用户息息相关”的方法似乎使事情成为可能。
  • @SundayMonday “领带与用户联系”的方法让您向有意玩您应用程序的用户敞开大门。如果耗材在现实世界中具有某些价值(例如,让您拨打“真实”电话),这可能是一个问题。消耗品是逐个设备的项目,因此需要在了解它们与特定设备相关联的情况下进行购买。 Apple 不允许您恢复购买的消耗品。您应该警告您的用户消耗品不可共享,并让用户可以轻松购买更小块的物品(例如,如果您提供 100 个硬币,则同时提供 50 个和 20 个)。
【解决方案2】:

我有理由确定 iCloud 键值存储在应用程序删除/重新安装过程中仍然存在。这可能是要走的路。

否则,是的,您将需要自己的服务器来存储令牌计数,以及某种方式来验证用户(设备 ID 不好,如果他们更换设备并从备份中恢复怎么办?)以及所有随之而来的麻烦 -注册、忘记密码屏幕等。

【讨论】:

    猜你喜欢
    • 2015-01-07
    • 1970-01-01
    • 2011-09-17
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多