Gente, tô fazendo um sistema que quando roda pela primeira vez, grava a data de instalação no banco e a data de vencimento da licença (um ano após a instalação).
Ocorre que pra fazer as comparações de data estou lendo a data atual em que o programa está sendo executado e comparando com a data de vencimento vida do banco. Se a data de vencimento for menor que a data atual é por que já venceu.
O problema é essa data atual. Estou chamando a classe Calendar:
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
mas neste caso ai date é a data do sistema. Fiz o seguinte teste: se o usuário altera a data do windows(canto direito da tela, embaixo) para anterior à data do vencimento e executar o programa, ele roda normal…
tem como impedir isso? pegar uma data de outro lugar??? alguma ideia???
Mesmo se for local, seria legal você validar a data em algum servidor.
Tem algumas APIs/Serviços que fazem isso (retornam um Timestamp).
O problema é que você estará obrigando o cara a possuir conexão à Internet, e terá que alcançar o servidor que te dará o horário - aí entra em Proxy, Rotas (arquivo hosts).
Algumas aplicações, assim que “descobrem” que a licença já venceu, marcam uma Flag no “banco/registro” para o usuário não logar mais, que só será liberada quando tiver aplicado uma nova licença.
Certa vez eu fiz algo assim, criamos uma aplicação que seria rodado localmente pelo usuário , ha regra era bem parecida com a sua, havia uma expiração de 1 ano , qual foi a solução que usamos na época:
Ao rodar o software pela primeira vez já gravava a data inicial e data de expiração no banco … porém o dia atual iamos buscar em nosso servidor … agora tinha um problema , senão houvesse acesso com a internet a aplicação nunca expirava …rs… mas isto era dificil de ocorrer pois era um programa off que era disponibilizado para o corretor e este em algum momento tinha que descarregar suas vendas no site da corretora e neste momento aplicavámos esta regra … fazia parte do negócio …
Acredito que o pessoal possa ter alguma solução melhor pois esta já faz uns anos que participei …
Tens uma solução simples, que embora não seja 100% eficaz, já é melhor.
Quando é que as pessoas tentam alterar a data do computador? Quando aparece a mensagem a dizer que expirou a licença. O que tens de fazer é assegurar que, após aparecer uma vez essa mensagem, o programa fica sempre inválido, independentemente da data.
Assim, mesmo que a pessoa tente mudar a data vai ter sempre a mensagem de que expirou a licença.
Claro que isto não cobre o caso da pessoa mudar a data antes de abrir o programa. Mas quem é que se vai lembrar de que o programa vai expirar e precisa de mudar a data?
[quote=pmlm]Tens uma solução simples, que embora não seja 100% eficaz, já é melhor.
Quando é que as pessoas tentam alterar a data do computador? Quando aparece a mensagem a dizer que expirou a licença. O que tens de fazer é assegurar que, após aparecer uma vez essa mensagem, o programa fica sempre inválido, independentemente da data.
Assim, mesmo que a pessoa tente mudar a data vai ter sempre a mensagem de que expirou a licença.
Claro que isto não cobre o caso da pessoa mudar a data antes de abrir o programa. Mas quem é que se vai lembrar de que o programa vai expirar e precisa de mudar a data? [/quote]
Concordo com você , esta é uma maneira simples, porém vamos imaginar que o software em questão seja algo legal que caia no gosto do mercado e tal … a primeira busca que se fizer a respeito de burlar a licença do SW será exatamente esta , “A expiração do SW esta vinculado ao relógio do windows” basta altera-lo para você usar o software eternamente …rs… claro que isto tem a haver com a regra do negócio em si …e concordo tbm que as pessoas apenas se preocupariam com isto após ter inspirado …nestes casos o que você mencionou é perfeito …abçs …
Logo mais vou ter que fazer algo parecido para uma app minha e nem tinha pensado nessa da data do computador.
Pq ao invés de controlar por data e montar seu relógio e calendário, você não controla por quantidades de acesso? Por exemplo, sua aplicação vai ter licença de um ano, controla por número de acessos em dias diferentes.
[Ex:]
Licença 1 ano: 365 acessos
[Lógica:]
Assim que ele logar, guarda a data atual (do dia)
Depois a cada acesso no mesmo dia verifica se a data é diferente da anterior (dd/MM/yyyy)
A cada mudança de dia, o sistema verifica que a ultima data de acesso é diferente da de hoje e subtrai um número de acesso
[Contra:]
Se o seu cliente utilizar o sistema 1 vez por semana, vai prorrogar a licença pra mais de ano.
[quote=SandroSoftwares]Tô tendo outra ideia meio esquisita mas vamos lá…
tô pensando em criar meu próprio relógio/calendário.
alguém já viu isso?[/quote]
Cara na boa , imagine que mesmo vc fazendo isto , vc vai precisar fazer a consulta em algum lugar ou pesquisar uma data em algum lugar para atualizar sua aplicação (relógio) , isto na minha opinião não vale a pena , pq já q vc vai ter q consultar algo em algum lugar , busque a hora em um server , ou algum serviço na web q te mande a data , hora, correta …acho que é isto …pense melhor …
Ele vai estar me prejudicando por um lado, mas vai estar se prejudicando tbm pois um dia precisará gerar relatórios e não vai conseguir por causa da data…
Uma forma de impedir alteração da data para impedir que o usuário fique sempre usando o aplicativo é fazer verificações ANTES DA LICENÇA COMEÇAR e DEPOIS DA LICENÇA TERMINAR, ou seja, no código restringimos o acesso ao sistema da data da renovação até a data de vencimento e pronto… se ele alterar a data do sistema operacional é só dizer que aquele dia já foi gravado. (para isso temos que gravar os dias de utilização do software no banco.)
não… eu reconheço o ultimo dia gravado. Se for igual a data atual vindo do sistema operacional ele permite rodar…
mas ai vc pode me dizer: então o cara vai rodar o aplicativo sempre nessa data.
mas ele trava se houve pelo menos um dia posterior registrado e informa que ou a data esta incorreta ou a licença expirou.
Um dia o sistema pega o bendito.
Se a data estiver errada ele pega e força o cara a corrigi-la.
Se a licença expirou ele só roda pós renovação.