我的应用程序是一种袖珍指南,其中包含全年的一些数据。我假设用户将至少使用一次该程序并通过 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);
}