代码之家  ›  专栏  ›  技术社区  ›  stealthcopter

当没有数据连接处于活动状态时,Android licensing ServerManagedPolicy返回dontAllow

  •  2
  • stealthcopter  · 技术社区  · 15 年前

    我已经实施了 android licensing 在我的应用程序中,下面是使用ServerManagedPolicy的示例代码。

    许可证检查器工作正常,但是当设备或仿真器没有数据连接时,许可证代码将始终返回dontAllow(),而我希望它允许。我在上面的页面上似乎找不到任何详细说明如何避免这种情况的内容。

    3 回复  |  直到 10 年前
        1
  •  2
  •   stealthcopter    15 年前

    这是使用测试帐户的问题,它们将在1分钟后(最短)使缓存结果过期

    这可能是因为您可以在所有可能的情况下更改服务器对测试的响应,并且您不希望等待缓存过期,或者强制它针对每种情况进行刷新。

        2
  •  0
  •   j0k gauthamp    13 年前
    1. 将示例应用程序上载到Market。在配置文件中进行更改。
    2. 在手机上进行测试时,请确保使用与您上传的相同的APK:use the“ latform-tools/adb install <file>.apk “命令
        3
  •  0
  •   Robert Scott    6 年前

    我可以确认,对于Play Store中内部测试轨道上的版本,validityTimestamp确实设置为服务器成功“允许”响应后一分钟。经过进一步的研究,我知道一分钟的缓存时间是从哪里来的。它不是由服务器显式设置的。它实际上在lvl库代码中,如上所述是可编辑的。通常(对于生产版本),服务器将validityTimestamp返回到“extras”中的ServerManagedPolicy类,如下所示:

    下面是这个方法的相关部分:

     private void setValidityTimestamp(String validityTimestamp) {
        Long lValidityTimestamp;
        try {
            lValidityTimestamp = Long.parseLong(validityTimestamp);
        } catch (NumberFormatException e) {
            // No response or not parsable, expire in one minute.
            lValidityTimestamp = System.currentTimeMillis() + MILLIS_PER_MINUTE;
        }
    

    我添加了一些调试代码来查看这个函数的字符串参数是什么。结果是一个空字符串。所以服务器在“VT”的extras映射中没有返回任何内容。ServerManagedPolicy中对这种不可解析字符串的响应是使validityTimestamp为当前时间加上一分钟(MILLS\u PER\u minute)。