【问题标题】:Persisting a Receipt in iCloud using CloudKit in iOS在 iOS 中使用 CloudKit 在 iCloud 中保留收据
【发布时间】:2015-06-01 19:44:05
【问题描述】:

#1

我正在开发带有非续订订阅的 iOS 应用程序。 我想让订阅在用户的所有设备上可用,并让用户恢复购买。

正如苹果文档中所说:

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

我不使用自己的服务器,因为我的应用程序目前仅适用于 iOS。所以 iCloud 似乎是更简单的解决方案。

在观看和阅读了很多关于 iCloud 的 WWDC 视频和文档之后,对我来说,CloudKit 似乎是最好的解决方案,因为键值存储限制为 1MB,而且我很有可能获得比每个更大的总数据大小用户(经过一年的不同购买,例如)。

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

#2

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

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

#3

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

提前谢谢你。

【问题讨论】:

  • 好的,我找到了问题#2的答案here据说只有在Persisting完成后才能完成事务。
  • 如果用户阻止您的应用访问 iCloud,您会怎么做?你应该使用 NSUserDefaults 还是 Keychain?

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


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

  2. 无论您使用什么技术,同步都是一个问题。一种改进的方法是注册一个开始购买标志,然后进行购买,然后设置购买标志。然后,如果记录停留在“开始购买”状态,您就知道出了问题,您可以在 App Store 中查看购买是否成功。

  3. 您应该为您的应用添加恢复购买功能

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2012-05-01
    • 2015-04-09
    • 2019-04-10
    • 1970-01-01
    相关资源
    最近更新 更多