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