Я должен реализовать механизм лицензирования для приложения android. Обычно можно использовать служба лицензирования из игрового магазина. Суть в том, что приложение не будет опубликовано в PlayStore, а устройства, на которых оно будет запущено, не будут иметь доступа к inte rnet.
. В моем текущем решении я использую следующие части для генерации лицензионный ключ:
- android_id (ключ будет работать только на устройстве с таким идентификатором)
- Текущий год (ключ будет работать только в этом году)
Вот мой код
public void checkForLicense(){
boolean isValid = validateKey();
if(!isValid){
LicenseDialog.createFrom(mContext);
}
}
private boolean validateKey(){
try {
String encoded = Settings.getInstance().getKey();
String decoded = decode(encoded);
if(decoded == null || decoded.equals(""))
return false;
boolean isSame = isSameDevice(decoded);
boolean isSpan = isSpanActive(decoded);
return isSame && isSpan;
} catch (Exception ex){
Log.d("DEBUG","FAILED TO VALIDATE KEY");
return false;
}
}
private boolean isSameDevice(String key){
String android_id= android.provider.Settings.Secure.getString(mContext.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
return Utils.checkIfKeyIsFromAndroidId(android_id, key);
}
private boolean isSpanActive(String key){
Calendar calendar = Calendar.getInstance();
int currentYear = calendar.get(Calendar.YEAR);
return Utils.checkIfKeyIsFromCurrentYear(currentYear);
}
Проблема:
Проблема сейчас в том, что можно использовать лицензионный ключ с истекшим сроком действия, изменив дату android устройство.
Есть ли другие варианты, которые я мог бы обработать для проверки года?