лицензирование без playstore и inte rnet проверка подключения год проверки - PullRequest
0 голосов
/ 13 февраля 2020

Я должен реализовать механизм лицензирования для приложения 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 устройство.

Есть ли другие варианты, которые я мог бы обработать для проверки года?

...