2012-10-29 24 views
5

我已经实施了一次性购买并解锁应用程序中的某些功能的IAP。由于每位用户只进行一次购买,因此如果此用户已进行购买,我可以询问Apple的IAP服务。如果是这样,然后解锁功能。如果不是,则显示IAP提示。我可能还会在用户默认情况下坚持一些“userDidMakePurchase”标志,作为使用不带网络连接的应用程序的不完美解决方案。维护iOS内购买应用程序的记录

现在我想实现一个IAP,用户可以反复使用它。每次向用户分配十个令牌以使用应用内货币。 如何确定特定用户启动应用程序时令牌的数量?

到目前为止,我已考虑在用户默认值中持续使用令牌计数。这有一些主要的缺点,如删除和重新安装应用程序消除用户的令牌余额。另外令牌不会传递给其他设备。

当然,我可以在自己的服务器上使用令牌计数或使用AWS。不过,如果可能的话,我想避免这种情况。我只熟悉IAP基础知识,因此Apple可能会跟踪所有的购买情况,我可以从中找出它。

+0

“当然,我可以在自己的服务器上使用令牌计数或使用AWS,但是如果可能的话,我想避免这种情况。”你会说明为什么你想避免这种情况吗? – khunshan

回答

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包装围绕钥匙扣CF的API,苹果有好心published它一个很好的包装(滚动到页面底部看到的代码)。将安全框架添加到您的解决方案中,将包装程序代码复制粘贴到您的项目中(仅有两个文件)。现在你可以使用钥匙链,就好像它是一个NSDictionary

+3

非常感谢您的信息!钥匙扣在某些方面听起来很有希望。不过,我不确定它是否解决了多设备问题。钥匙串数据不是跨设备同步的吗? – SundayMonday

+5

@SundayMonday不幸的是,跨设备共享耗材是一项非常棘手的任务,需要(除其他外)支持事务更新。 Apple通过豁免消费品免除共享要求间接承认了在应用程序内购买指导方针中正确使用它的技巧:“消费品是您的内容在所有用户设备上可用的要求的一个例外,消费品是数字产品在使用后用完或消失,永远不能重复使用。“ – dasblinkenlight

+2

@SundayMonday如果您必须实施共享,很可能需要使用[服务器产品模型](http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/APIOverview/) – dasblinkenlight

1

我相当确定iCloud键值存储在整个应用程序删除/重新安装过程中持续存在。这可能是要走的路。

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