3

#1

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

正如苹果文档中所说:

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

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

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

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

#2

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

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

#3

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

先感谢您。

4

1 回答 1

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

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

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

于 2015-03-31T20:17:11.107 回答