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

Subscription verification for offline use-case(Android)

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

Keep in mind that users will want the ability to use your app at any time, including when there may be no network connection available. Make sure that your approach to purchase verification accounts for the offline use-case.

如果缺少 Internet 连接,如何执行此检查? 我的想法是在设备上存储一个关于当前订阅的 "local label"(在数据库或文件中)。但是这样不可靠,容易坏。 我还找到了有关 android keystore 的信息。但是看起来很复杂。

任何想法和建议。

据说有很多方法可以在本地存储有关订阅的信息。一种方法是,以非对称方式加密订阅信息

  • 客户端向服务器发送登录信息以及某种设备代码(IMEI 或其他)
  • 服务器以某种许可证代码响应,该代码使用私钥和设备代码加密
  • 客户端将许可证存储在文件中
  • 使用客户端知道的 public 密钥解密许可证的内容

可以通过从客户端获取 public 密钥来读取许可文件(毕竟是 public),因此如果你真的想确定,你不应该存储其中的任何敏感信息,但它不应该能够伪造许可证,因为这需要私钥,而私钥是未知的。由于客户端传递的设备代码,无法将许可证文件复制到另一台设备。

此外,您可以为许可证指定一个到期日期,之后将通知客户 xe 必须在线更新许可证。

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