8

我的应用程序是一种袖珍指南,其中包含全年的一些数据。我假设用户将至少使用一次该程序并通过 Internet 访问来激活许可证。或者至少这是我对 Android 许可系统如何工作的理解。我正在使用 ServerManagedPolicy。

它会定期检查许可证吗?有什么办法可以控制这个吗?我不希望我的用户处于一个偏僻的地方,一个应用程序已经和以前激活,然后突然在 1 周、1 个月、1 年等之后。应用程序开始限制应用程序本身的可用性,因为许可证不能无需再次验证。我的应用程序将被那些将在那里生活数周甚至数月的人用于网络访问不稳定(不能一直认为是理所当然)的偏远地区。

我觉得我至少应该警告他们,他们将每 X 周被要求这样做。许可证制度甚至那么严厉吗?

我知道我可以在 LicenseCheckerCallback 的 applicationError void 上使用 ERROR_CONTACTING_SERVER 标志处理错误。“VT”响应是否始终相同(无法在测试帐户/我的帐户上进行测试)?我只是好奇你们如何在自己的现实生活应用程序中处理这种情况。我在这里错过了什么吗?出于某种原因,我觉得我是。有没有“抓”?

// 编辑:

这是我现在正在尝试的代码:

// ServerManagedPolicy.java
private void setValidityTimestamp(String validityTimestamp) {
    Long lValidityTimestamp;
    try {
        lValidityTimestamp = Long.parseLong(validityTimestamp);
    } catch (NumberFormatException e) {
        // No response or not parsable, expire in one minute.
        Log.w(TAG, "License validity timestamp (VT) missing, caching for a minute");
        lValidityTimestamp = System.currentTimeMillis() + MILLIS_PER_MINUTE;
        validityTimestamp = Long.toString(lValidityTimestamp);
    }
    // added by me--->

    private static long maxLicense = 1000 * 3600 * 24 * 30; // ~ roughly 30 days
    private static long minLicense = 1000 * 3600 * 24 * 3;  // ~ roughly 3 days

    long lMax = System.currentTimeMillis() + maxLicense;
    long lMin = System.currentTimeMillis() + minLicense;
    if ((lValidityTimestamp > lMin) && (lValidityTimestamp < lMax)) {
        validityTimestamp = Long.toString(lMax);
    }

    // <--- added by me

    mValidityTimestamp = lValidityTimestamp;
    mPreferences.putString(PREF_VALIDITY_TIMESTAMP, validityTimestamp);
}
4

4 回答 4

4

只是我的两美分,您可以定义您想要检查的时间段(比如说 3 天)。3 天后检查许可证,如果没有互联网,请继续让用户使用它,比如说最多一周,否则应用程序将无法正常运行。或者只是保持它的全部功能,直到再次连接,然后您可以检查并重置您的时间戳。许可证检查器只会在您告诉它时进行检查。

如果需要,我可以澄清!

祝你好运

于 2010-11-29T03:23:03.097 回答
2

大卫,简短的回答是由你决定。

直接取自开发者文档。“例如,服务器为应用程序的许可证有效期、重试宽限期和最大允许重试次数等提供推荐值。”

根据您选择实施政策的方式,您可以选择自己问题的答案。

于 2010-11-25T02:55:44.637 回答
1

即使使用 ServerManagedPolicy,您的应用程序也只会在您调用“checkAccess()”时检查许可证,如许可文档的检查访问部分所述。如果从未发出该调用,您的应用程序将继续无限期地运行 - 因此,如果您可以检测到您的用户处于无法合法地 ping 服务器以获取许可证信息的情况,您可以将“checkAccess”调用包装在条件。

页面下方有关于设置测试帐户以验证 LVL 功能的信息。我强烈建议充分利用该测试功能。

于 2010-11-24T22:36:46.750 回答
1

我很简单地得到了这个答案。通过 USB 将真实设备连接到您的计算机。在 ServerManagedPolicy.java 中编辑 LVL 库源代码,并使用 DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM) 添加 lValidityTimestamp 变量的日志语句。然后卸载您的应用程序以清除任何以前的许可证缓存时间戳,重新安装并运行您的应用程序。这会联系服务器,然后您的日志记录语句会显示答案。在我的测试中,VT 从现在开始正好是 1 天(当许可证被检查时)。

于 2011-01-22T07:05:34.843 回答