离线用例(Android)的订阅验证

离线用例(Android)的订阅验证,android,xamarin.forms,xamarin.android,in-app-purchase,in-app-billing,Android,Xamarin.forms,Xamarin.android,In App Purchase,In App Billing,我通过订阅创建了android应用程序(xamarin表单)。我在自己的服务上处理订阅。但有一点,引用文件: 请记住,用户希望能够随时使用您的应用程序 时间,包括可能没有可用网络连接的时间。 确保您的购买验证方法适用于 离线用例 如果缺少Internet连接,如何执行此检查? 我的想法是在设备上存储关于当前订阅的“本地标签”(在数据库或文件中)。但这是不可靠的,容易打破。 我还找到了有关的信息。但它看起来很复杂 任何想法和建议。据推测,在本地存储订阅信息的方法有很多种。一种方法是对订阅信息进行非

我通过订阅创建了android应用程序(xamarin表单)。我在自己的服务上处理订阅。但有一点,引用文件:

请记住,用户希望能够随时使用您的应用程序 时间,包括可能没有可用网络连接的时间。 确保您的购买验证方法适用于 离线用例

如果缺少Internet连接,如何执行此检查? 我的想法是在设备上存储关于当前订阅的“本地标签”(在数据库或文件中)。但这是不可靠的,容易打破。 我还找到了有关的信息。但它看起来很复杂


任何想法和建议。

据推测,在本地存储订阅信息的方法有很多种。一种方法是对订阅信息进行非对称加密

  • 客户端向服务器发送登录信息以及某种设备代码(IMEI或其他)
  • 服务器使用某种许可证代码进行响应,该代码使用私钥和设备代码进行加密
  • 客户端将许可证存储在一个文件中
  • 使用客户端知道的公钥对许可证的内容进行解密
通过从客户端获取公钥(毕竟是公钥)可以读取许可证文件,因此,如果您真的想确定,不应该在其中存储任何敏感信息,但它不应该伪造许可证,因为这需要私钥,而私钥是未知的。由于客户端传递的设备代码,无法将许可证文件复制到其他设备

此外,您可以给许可证一个到期日,在此日期之后,客户将被告知xe必须联机才能续订许可证

备注:您永远不能信任在您无法完全控制的设备上运行的代码,因此可能总是有办法绕过安全措施