Когда пользователь покупает несколько часов использования, вы можете дать ему (уникальный) лицензионный ключ, а также сохранить этот ключ на своем веб-сервере licensing.yourdomain.com
вместе с количеством приобретенных часов и количеством минут, потраченных (так называемый «счетчик минут») до настоящего времени (то есть 0). Теперь в приложении есть функция CheckLicensed: boolean
, которая выполняется, например, TTimer
раз в минуту. Это делает легкий запрос POST
на licensing.yourdomain.com
, отправляя лицензионный ключ. Затем сервер увеличивает счетчик минут на единицу. Если счетчик минут меньше количества купленных минут, функция CheckLicensed
возвращает значение true. Если срок действия лицензии истек, с другой стороны, он возвращает false, и вы можете отключить функции или даже закрыть приложение (в зависимости, конечно, от характера приложения).
Конечно, когда приложение не запущено, счетчик минут не будет увеличен, и поэтому лицензия не будет потрачена впустую. Кроме того, вы можете дать пользователю возможность приостановить TTimer
, но, конечно, это также отключит несколько кнопок (при необходимости) в программе.
Этот подход требует постоянного доступа в Интернет, но это не может быть проблемой для вас. Это очень безопасно. Например, конечный пользователь не может обмануть, изменив свое системное время или счетчик минут (поскольку он находится на вашем сервере, и только правительственное агентство (США) может получить к нему доступ).
Как отправить POST
запрос? Я уже дал ответ на этот вопрос ранее на Как отправить HTTP-запрос Post в Delphi 2010 с помощью WinInet