5

我想在我的 android 许可证政策中满足 LICENSE_OLD_KEY 的要求。我打算修改它,ServerManagedPolicy因为它不适合这个,据我所知,它似乎只是在寻找或Policy.LICENSED方法:Policy.NOT_LICENSEDprocessServerResponse

public void processServerResponse(int response, ResponseData rawData) {

    // Update retry counter
    if (response != Policy.RETRY) {
        setRetryCount(0);
    } else {
        setRetryCount(mRetryCount + 1);
    }

    if (response == Policy.LICENSED) {
        // Update server policy data
        Map<String, String> extras = decodeExtras(rawData.extra);
        mLastResponse = response;
        setValidityTimestamp(extras.get("VT"));
        setRetryUntil(extras.get("GT"));
        setMaxRetries(extras.get("GR"));
    } else if (response == Policy.NOT_LICENSED) {
        // Clear out stale policy data
        setValidityTimestamp(DEFAULT_VALIDITY_TIMESTAMP);
        setRetryUntil(DEFAULT_RETRY_UNTIL);
        setMaxRetries(DEFAULT_MAX_RETRIES);
    }

    setLastResponse(response);
    mPreferences.commit();
}

我想知道 LICENSE_OLD_KEY 的响应代码是什么,因为策略中不存在该代码:

public static final int LICENSED = 0x0100;
public static final int NOT_LICENSED = 0x0231;
public static final int RETRY = 0x0123;

我看了一下here,但找不到列出名称和值的任何地方。

我可以看到 LicenseValidator 中有一个服务器响应代码列表,但它们与 Policy 中的响应代码不匹配:

    // Server response codes.
private static final int LICENSED = 0x0;
private static final int NOT_LICENSED = 0x1;
private static final int LICENSED_OLD_KEY = 0x2;
private static final int ERROR_NOT_MARKET_MANAGED = 0x3;
private static final int ERROR_SERVER_FAILURE = 0x4;
private static final int ERROR_OVER_QUOTA = 0x5;

private static final int ERROR_CONTACTING_SERVER = 0x101;
private static final int ERROR_INVALID_PACKAGE_NAME = 0x102;
private static final int ERROR_NON_MATCHING_UID = 0x103;
4

2 回答 2

5

考虑一下,我决定尝试使用 AlertDialog 在我的手机上显示 Google Play 服务器返回的原因代码。这是我发现的:

在 Developer 控制台配置文件中选择 LICENSED,返回数字 256,根据Policy.LICENSED.

选择 NOT_LICENSED 返回数字 561,再次按照Policy.NOT_LICENSED.

最后选择 LICENSED_OLD_KEY 返回数字 256,与Policy.LICENSED.

因此,似乎不再使用 LICENSED_OLD_KEY,或者更确切地说,LICENSED 和 LICENSED_OLD_KEY 之间没有区别。鉴于谷歌在其文档中提供的信息,这有点令人困惑。

需要注意的是,我确实尝试卸载我的应用程序并在开发者控制台中选择不同的选项几次,但它总是得到相同的答案!

于 2012-09-06T14:10:34.033 回答
0

您正在查看的代码只是一个参考实现。它不知道您想如何详细处理 LICENSED_OLD_KEY 情况。该文档建议您可能希望限制对当前应用程序的访问,或从当前应用程序访问您的服务器数据,并要求用户更新和使用最新版本。没有什么参考实现可以让您处理所有这些情况。您可以并且应该修改代码以单独处理 LICENSED_OLD_KEY。

没有迹象表明 LICENSED_OLD_KEY “不再使用”,因为它仍然在 LicenseValidator.java 中作为服务器响应处理,并且“OLD_KEY”指的是您的应用程序的旧版本,而不是 Google Play 服务器处理的旧版本。

于 2012-12-18T15:43:04.860 回答