iOS/macOS 应用内购买 - 在 KeyChain 中保存什么

iOS/macOS In app purchases - what to save in KeyChain

我正在为我的一个跨平台应用程序 (iOS + macOS) 实施应用程序内购买。我实施非消耗性 IAP 的方式是在购买后在钥匙串中为特定钥匙保存一个标志。 (例如键 com.app.prodctId 的值 true )并在运行时检查该标志是否存在以及值是什么。然而,这似乎非常不安全,因为一些用户可能只是将具有特定值的密钥添加到钥匙串中,从而在不购买的情况下获得对锁定功能的访问权限。一个解决方案是在保存之前加密(或使用盐散列数据)标志,但我需要为每个 iCloud 帐户都有一个单独的密钥(这样用户就可以在他的 iCloud 上享受所有设备的产品帐户),我不太确定这是什么。

每个 iCloud 帐户是否可以获取任何内容,以便我可以将 key/salt 用作散列的加密?或者是否有更好的方法来管理应用程序购买中的非消耗品?

对于每个下载您的应用程序的用户,Apple 都会创建一个包含一些元信息(用户下载的应用程序版本、时间等)的收据。

当您的应用提供应用内购买时,这些也会保存在收据中。由于此收据会自动与用户的所有设备同步,因此检查用户购买了什么并相应地解锁其所有设备上的内容是正确的选择。

有关收据验证技术的文章,请参阅 here。 如果您选择本地(设备上)收据验证,我建议您使用 TPInAppReceipt 库对收据进行编码。这样就省去了很多麻烦。