维护iOS应用内购买记录

Sun*_*day 5 in-app-purchase ios

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

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

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

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

das*_*ght 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   |
------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

由于您需要存储少量数据,因此您的理想候选者是Keychain:它可以脱机工作,可以重新安装,并且作为额外的奖励,它也是加密的.

尽管NSKeychain CFAPI 周围没有内置的包装器,但Apple已经为它发布了一个很好的包装器(滚动到页面底部查看代码).将安全框架添加到您的解决方案中,将包装器代码复制粘贴到您的项目中(它只有两个文件).现在你可以像使用钥匙串一样使用钥匙串NSDictionary.

  • @SundayMonday不幸的是,跨设备共享耗材是一项非常棘手的任务,需要(除其他外)支持事务更新.Apple通过免除消费品的共享要求,间接承认了在应用内购买指南中正确行事的困难:"消费品是您的内容在所有用户设备上可用的要求的一个例外.消费品是数字商品使用后消失或消失,永远不能重复使用." (5认同)
  • 非常感谢您的信息!钥匙链在某些方面听起来很有希望.但是我不确定它是否解决了多个设备问题.钥匙串数据不是跨设备同步的吗? (3认同)
  • @SundayMonday如果你必须实现共享,很可能你需要使用[服务器产品型号](http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/APIOverview/OverviewoftheStoreKitAPI. html),这要复杂得多. (2认同)