在iOS中使用CloudKit在iCloud中保留收据

时间:2015-03-28 14:32:05

标签: ios in-app-purchase cloudkit icloud-api

#1

我正在开发iOS应用,其中包含非续订订阅。 我想在所有用户的设备上提供订阅,并让用户恢复购买。

正如Apple的文档所述:

  

对于非续订订阅,请使用iCloud或您自己的服务器保留   持续记录。

我不知道如何使用我自己的服务器,因为我的应用目前仅适用于iOS。所以iCloud似乎更容易解决。

观看和阅读大量关于iCloud的WWDC视频和文档后,似乎对我来说最好的解决方案是CloudKit,因为键值存储限制为1MB,我有很大的机会让总数据量大于每个用户(前一年不同的购买后)。

问题是:到目前为止我是对吗?

#2

我正在使用RMStore Library进行购买。就像在文档中说的那样,RMStore没有对iCloud进行事务持久性的参考实现,我在Internet上找不到任何示例,所以我必须自己从头开始。

面对我的第一个问题是:如果在用户购买订阅后将收据同步到iCloud会有什么问题?例如:用户购买了订阅,得到了一些错误将它同步到iCloud,关闭应用程序就是这样。 这是一个真实的场景吗?对于非续订订阅,收据不会存储在Apple的任何地方,因此我完全有责任为我的用户提供和保存。 我应该在交易完成后立即将收据保存在NSUserDefaults或钥匙串中,以便下次用户启动应用时能够将同步数据与本地数据进行比较吗?或者也许我不应该在收到同步之前“完成交易”?我找不到Apple的任何指南......

#3

下一个显而易见的问题是:用户可以清除我的应用程序的iCloud私有存储空间吗?用户可以以某种方式删除存储在iCloud收据中的内容,从而删除有关其购买的所有信息吗? 如果是的话 - 我应该如何处理?如果这种情况是真的,我无法恢复购买并为他打开App的功能,直到他再次购买订阅。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

  1. CloudKit不限于1MB。记录有限。但是如果记录中有超过1MB的数据,则应考虑重构。如果它只是某种数据blob,那么你应该将它保存在CKAsset中。为此,限制要高得多。

  2. 无论您使用何种技术,同步都将成为问题。改进的一种方法是通过注册开始购买标志,然后进行购买,然后设置购买的标志。然后,如果记录保持在“开始购买”状态,您就会知道出现了问题,如果购买成功,您可以通过App Store查看。

  3. 您应该在应用中添加恢复购买功能