5

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

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

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

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

4

2 回答 2

8

从“一次购买,永远使用”切换到“多次购买,持续使用”使您的购买成为 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:它可以离线工作,可以重新安装,并且作为额外的奖励,它也是加密的。

NS尽管没有围绕钥匙串API 的内置包装器CF,Apple 还是为它发布了一个不错的包装器(滚动到页面底部以查看代码)。将安全框架添加到您的解决方案中,将包装代码复制粘贴到您的项目中(它只有两个文件)。现在您可以像使用NSDictionary.

于 2012-11-13T18:57:28.143 回答
1

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

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

于 2012-10-29T21:21:39.773 回答