ServerManagedPolicy
Google 在其许可证验证库中提供的默认值依赖于服务器响应来确定许可证重新验证间隔。这导致需要永久每隔几天重新验证一次。这不仅会给用户带来麻烦,对于长时间没有连接的用户来说,这可能是一个严重的问题。(我们刚刚收到一位用户的询问,该用户预计将在几周内没有互联网连接,这就是提出这个问题的原因。)
总之,我正在寻找一种能够完成两件事的算法:
- 与 相比,大大降低了连接要求
ServerManagedPolicy
; - 提供相同级别的反盗版保护。
在回答这个问题时,建议的策略算法是忽略 Google 服务器响应中提供的时间,而是使用大约一个月的 LICENSED 到期期限,每隔几天尝试一次许可证检查(如果收到一个 LICENSED 响应)。
虽然这种方法部分解决了第一个目标,但它仍然要求用户在使用该应用程序时每月连接一次,因此它不适用于我们的(至少一个)用户。
以下算法实现了第一个目标,但我不知道第二个目标。任何指出该算法弱点的评论,或对另一种方法的建议,都将受到欢迎。
- 首次运行时,请进行许可证检查并坚持在提供完整功能之前进行 LICENSED 响应。收到后,设置一个相对较短的到期期限(但比 Google Play 提供的退款期限长,目前为 15 分钟)。在此之后还要注册几天的宽限期。
- 该应用程序将在许可证到期后再次开始检查。如果连接失败(飞行模式等),它仍然可以工作,直到宽限期到期。
- 宽限期到期后,坚持第二次 LICENSED 响应,然后再允许正常的应用程序运行。
- 收到第二个 LICENSED 响应后,永久启用该应用程序的所有功能,不再费心检查。
- 如果在任何时候收到 UNLICENSED 响应,请永久禁用全部功能。(当然,用户可以通过删除所有应用数据来恢复到第 1 步。)
附加点:
- 有人建议放弃第一次许可证检查,等到返回期限到期后再进行许可证检查。坚持第一个 LICENSED 响应的目的是防止在许可证检查失败后用户简单地停止应用程序进程、清除应用程序数据并重新启动应用程序的漏洞利用。(即使一次只能使用 15 分钟,该应用程序也能提供价值。)
- 坚持第二个 LICENSED 响应的目的是绕过购买-运行-备份-退货-恢复漏洞。
- 我不是在问回调许可证检查是否是一个好主意(这就是谷歌提供的替代其已弃用的复制保护机制的方法)。我也很清楚,没有任何反盗版保护是万无一失的,谷歌的整个许可机制都可以被规避(在这种情况下,所有关于策略算法设计的问题都无关紧要)。这个问题的重点是与其他策略(例如)相比,
ServerManagedPolicy
上述算法的相对风险(对我们)和收益(对用户)。