您可以在 iOS 设备上验证 iOS 收据。但是您不能确定收据是否真的有效。用户可能已经入侵了设备,让您认为收据是有效的。
您的用户可以编辑您应用的可执行代码,也可以编辑操作系统。借助 Apple 采购系统等通用/共享 API,用户可以在自己的手机上运行一些公开可用的工具来避免付费。
但是,您的服务器由您控制。您的客户无法实际访问它。因此,您的服务器(希望如此!)不会被黑客入侵。与设备不同,这意味着您的服务器可以被信任。当您的服务器与 Apple 的服务器建立 SSL 连接时,您就知道您确实在与 Apple 的服务器通信。不是您的用户为了绕过应用内购买而安装的。
更新
假设您在用户购买了您的consumable product 后获得了您的Receipt。所以现在你想验证它,你有两个选择:
1.本地收据验证(从用户设备)。
2。通过您的服务器进行收据验证。
本地验证:
收到收据后,您可以通过应用程序中的verifyReceipt 端点传递receipt 文件的内容。你会得到一个响应,包括来自这个endpoints 的可读的JSON 正文。根据此响应,您可以验证收据并控制用户操作。
所有这一切都发生在您的应用[用户设备]中。发布您的应用程序后,如果没有另一个版本,您将无法修改您的应用程序(如果需要)。此外,用户对其设备的控制权比您多。
通过您的服务器验证:
得到Receipt data 后,需要对数据进行Base64 编码。将此 Base64 编码的数据发送到您的服务器。
在您的服务器上,创建一个 JSON 对象,其中包含收据数据、密码(如果收据包含自动更新订阅)和 requestBody 中详述的 exclude-old-transactions 键。将此 JSON 对象作为 HTTP POST 请求的负载提交。在测试环境中,使用https://sandbox.itunes.apple.com/verifyReceipt作为URL。在生产环境中,使用 https://buy.itunes.apple.com/verifyReceipt 作为 URL。
现在您将从 App Store 获得 JSON 对象响应,其中包含 responseBody 中详述的键和值。根据响应,您可以验证收据并向应用发送响应以进行进一步操作。
因此,如果用户在您的应用中购买了某些东西,您不需要将所购买的东西存储在应用中。您希望将其存储在服务器上,并且该服务器仅在与 Apple 的服务器验证收据后才会将购买的数据发送到设备。
而且您在服务器中拥有比您的应用更多的控制权,您还可以随时更改任何有关收据验证的机制(无需更新您的应用)并从服务器控制您的用户。
希望你能得到它。现在就看你喜欢哪一种了。