维护iOS应用内购买记录

时间:2012-10-29 20:57:59

标签: ios in-app-purchase

我已经实施了一次性购买的IAP,解锁了应用中的某些功能。由于每个用户只购买一次,我可以询问Apple的IAP服务,如果该用户已购买。如果是,则解锁该功能。如果没有,则显示IAP提示。我可能还坚持了一些" userDidMakePurchase"用户默认标记为使用没有网络连接的应用程序的不完美解决方案。

现在我想实施一个IAP,用户可以反复进行。每次向用户提供十个令牌以使用应用内货币。 如何确定特定用户启动应用时的令牌数量?

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

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

2 个答案:

答案 0 :(得分: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有一个很好的包装器published(滚动到页面底部查看码)。将安全框架添加到您的解决方案中,将包装器代码复制粘贴到您的项目中(它只有两个文件)。现在您可以使用钥匙串,就好像它是NSDictionary

答案 1 :(得分:1)

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

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