我想在我的android许可证政策中满足LICENSE_OLD_KEY的要求。我本来打算修改ServerManagedPolicy
,因为它不适合这个,据我所知,它似乎只是在processServerResponse
方法中寻找Policy.LICENSED
或Policy.NOT_LICENSED
:
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;
我看了一下这里,但找不到任何列出名称和值的地方。
我可以看到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;
考虑一下,我决定尝试使用AlertDialog在手机上显示Google Play服务器返回的原因代码。以下是我的发现:
根据Policy.LICENSED
,在开发人员控制台配置文件中选择LICENSED会返回数字256。
再次根据Policy.NOT_LICENSED
,选择NOT_LICENSED返回数字561。
最后选择LICENSED_OLD_KEY返回数字256,与Policy.LICENSED
相同。
因此,似乎不再使用LICENSED_OLD_KEY,或者更确切地说,LICENSED和LICENSED.OLD_KEY之间没有区别。考虑到谷歌在这里的文档中提供的信息,这有点令人困惑。
需要注意的是,我确实尝试过几次卸载我的应用程序并在开发者控制台中选择不同的选项,但结果总是一样的!
您正在查看的代码只是一个参考实现。它不知道您希望如何详细处理LICENSED_OLD_KEY情况。文档建议您可能希望限制对当前应用程序或当前应用程序中服务器数据的访问,并要求用户更新和使用最新版本。没有什么可以提供的参考实现使您能够处理所有这些情况。您可以也应该修改代码以单独处理LICENSED_OLD_KEY。
没有迹象表明LICENSED_OLD_KEY"不再使用",因为它仍然在LicenseValidator.java中作为服务器响应处理,"OLD_KEY"指的是应用程序的旧版本,而不是Google Play服务器处理的旧版本。