В общем имеется продукт, библиотека для программистов (некоторое API).
Поставляется частично в исходниках, частично в виде скомпилированной dll.
Библиотека в онлайн не работает ни как, только офлайн.
На данный момент защита встроена в dll. Она элементарная и заключается в следующем:
Для работы с АПИ его необходимо проинициализировать. В функцию инициализации передается серийный номер. Внутри функции инициализации проверяется валидность ключа, и если он не валиден или отсутствует, то переходим в режим работы trial. В этом режиме либа смотрит в реестр и если там нет спец. записи, то выводит в модальном режиме окно, с просьбой приобрести лицензию, либо напомнить позже. Тут важно, что именно в модальном режиме. То есть выполнение инициализации блокируется, пока юзер не нажмет какую либо кнопку. Если юзер жмет на 'напомнить позже', то окно на несколько часов скрывается и не мешает программисту работать.
В общем все меня вроде устраивало, пока я не понял, что, возможно, я теряю много продаж.
Дело в том, что это API ориентировано не только на десктопные приложения, но и на серверные. Причем последние выполняются без пользовательской сессии. В результате, когда программист начинает тестить АПИ на сервере, у него просто "зависает" инициализация, и человек не разобравшись почему отказывается от покупки.
Каждый месяц обращается несколько человек с подобным вопросом. А сколь просто молча проходят мимо?
В общем вопрос. Что делать? Как можно защитить хоть в минимальном режиме API.
Ограничивать функционал не хочу, люди не смогут протестить то, что им нужно. Какие есть варианты?
NWP>В общем вопрос. Что делать? Как можно защитить хоть в минимальном режиме API. NWP>Ограничивать функционал не хочу, люди не смогут протестить то, что им нужно. Какие есть варианты?
А что либа делает?
Тем более в онлайн? Какие-то данные выдает пользующему коду? Может туда какой-нить ватермарк наложить в стиле "найдено 10 вирусов, 1 вылечили, 9 после оплаты"!?! Ну в смысле выдать первые результаты валидные, а дальше фейковые с предложением купить.
Только без понимания, что делает либа, и что от нее получает вызывающий код, навскидку предложить что-то сложно. Но как направление мысли...
Здравствуйте, Carc, Вы писали:
C>А что либа делает? C>Тем более в онлайн?
В онлайн ничего не делает. Только офлайн.
C>Какие-то данные выдает пользующему коду? Может туда какой-нить ватермарк наложить в стиле "найдено 10 вирусов, 1 вылечили, 9 после оплаты"!?! Ну в смысле выдать первые результаты валидные, а дальше фейковые с предложением купить.
Проблема в том, что АПИ довольно разнопланово. Кому то нужно одно, кому то другое. Получается что нужно блокировать весь функционал.
Раньше был ватермарк, но он только на генерируемые либой изображения ставился. А если юзеру не нужно было генерить изображения, то он мог даже и не узнать никогда о том, что либу надо покупать
Поэтому я от него отказался в пользу вот этого всплывающего окна как раз.
Здравствуйте, NWP, Вы писали:
NWP>Раньше был ватермарк, но он только на генерируемые либой изображения ставился. А если юзеру не нужно было генерить изображения, то он мог даже и не узнать никогда о том, что либу надо покупать NWP>Поэтому я от него отказался в пользу вот этого всплывающего окна как раз.
Можешь, например, ввести код ошибки ERROR_NO_LICENSE и возвращать его программистам в наиболее используемых функциях.
Не забудь только в доке описать что к чему.
Здравствуйте, pva, Вы писали:
pva>Можешь, например, ввести код ошибки ERROR_NO_LICENSE и возвращать его программистам в наиболее используемых функциях. pva>Не забудь только в доке описать что к чему.
Тогда они не смогут протестить эти самые наиболее востребованные функции. Это мне не очень нравится.
Здравствуйте, NWP, Вы писали:
NWP>Здравствуйте, pva, Вы писали:
pva>>Можешь, например, ввести код ошибки ERROR_NO_LICENSE и возвращать его программистам в наиболее используемых функциях. pva>>Не забудь только в доке описать что к чему.
NWP>Тогда они не смогут протестить эти самые наиболее востребованные функции. Это мне не очень нравится.
Тогда только time limited, и только, если нужен полный функционал.
Здравствуйте, NWP, Вы писали:
NWP>Ограничивать функционал не хочу, люди не смогут протестить то, что им нужно. Какие есть варианты?
А что если пересмотреть политику лицензирования и продавать именно "Разработческие"/"Интерактивные" ключи? Т.е. в неинтерактивном режиме пусть себе работает, а в противном случае отображать все эти Nag Screen'ы.
HgLab: Mercurial Server and Repository Management for Windows
Здравствуйте, NWP, Вы писали:
NWP>Тогда они не смогут протестить эти самые наиболее востребованные функции. Это мне не очень нравится.
Почему не смогут? Сделай какой-нибудь код триальный и пропиши его в документации и пусть для тестирования его используют, а при выносе в продакшн чтоб требовался уже купленный код.
Здравствуйте, NWP, Вы писали:
NWP>Каждый месяц обращается несколько человек с подобным вопросом. А сколь просто молча проходят мимо?
Забить. Молча проходят мало. По опыту. Но, если и их не хочется терять, то не так уж и сложно определить, что либа крутится в сервисе. Из сервиса достучаться до Desktop тоже не особая проблема. Там и показать окошко.
Это вариант номер раз. Вариант номер два: возвращать документированный код ошибки. В этом случае либа работает, скажем, 20 минут и требует рестарта (ну или как-то так). Ну и вариант номер три: триальный ключ.
Здравствуйте, MikePetrichenko, Вы писали:
MP>Здравствуйте, NWP, Вы писали:
NWP>>Каждый месяц обращается несколько человек с подобным вопросом. А сколь просто молча проходят мимо?
MP>Это вариант номер раз. Вариант номер два: возвращать документированный код ошибки. В этом случае либа работает, скажем, 20 минут и требует рестарта (ну или как-то так). Ну и вариант номер три: триальный ключ.
Сейчас я и даю триальный ключ, который протухает через некоторое время. Но даю обратившимся, а меня беспокоят молчуны.
А вот за 20 минут спасибо! Это идея. Во время ин циализации подымать поток, в котором пускать таймер и по истечении некоторого времени делать.... а что делать?
А собствено как и сказано выше, отображать код ошибки в некотрых ключевых функциях. Это идея!
Эммм... хотя есть проблемка. Десктопные юзеры могут этого и не заметить для них придется оставить окно. Значит надо либо различать, либо делать окно немодальным.
Ну и еще момент. Разработчик при получении такой ошибки может переинитить либу и продолжить пользоваться. Пользователь его программы даже не заметить ничего.
Здравствуйте, NWP, Вы писали:
NWP>В общем вопрос. Что делать? Как можно защитить хоть в минимальном режиме API. NWP>Ограничивать функционал не хочу, люди не смогут протестить то, что им нужно. Какие есть варианты?
Наверное самое разумное, все-таки именно функционал ограничивать. Надо только хорошо продумать как именно, наверняка что-то можно придумать. Ну например, по некоторым намекам у вас либа работает с изображениями. Так это же куча возможностей. Если ватермарки почему-то недопустимы, сделайте что размер должен быть кратен 17 например. Или еще что-то такое, чтобы и протестировать можно было спокойно и использовать на реальных данных затруднительно.
Здравствуйте, Michael7, Вы писали:
M>Наверное самое разумное, все-таки именно функционал ограничивать. Надо только хорошо продумать как именно, наверняка что-то можно придумать. Ну например, по некоторым намекам у вас либа работает с изображениями. Так это же куча возможностей. Если ватермарки почему-то недопустимы, сделайте что размер должен быть кратен 17 например. Или еще что-то такое, чтобы и протестировать можно было спокойно и использовать на реальных данных затруднительно.
Хм... а это идея! Спасибо!
У меня библиотека работает с файлами — это вообще краеугольное место. Без работы с файлами ничего полезного сделать не получится. Следовательно я могу ограничить например размер файлов с которыми можно работать. Точнее количество блоков данных внутри этих файлов.
Может еще кто какие варианты подскажет?
Пока наметил себе следующее:
1. Splash screen перенести из метода инициализации в метод открытия файлов.
2. Если АПИ используется в пользовательской сессии, то выводить splash screen. Иначе нет.
3. При открытии документов генерить спец. ошибку в случае если количество блоков данных в файле лежит в заданном диапазоне.
4. При инициализации запускать таймер по срабатыванию которого некоторые другие ключевые функции тоже перестанут работать.
Или пункт 4 лишний? Представляю какое огромное спасибо мне скажут разработчики, когда у них программа начнет периодически отваливаться. Не, пожалуй пункт 4 вычеркну.
Здравствуйте, NWP, Вы писали:
NWP>В общем имеется продукт, библиотека для программистов (некоторое API). NWP>Поставляется частично в исходниках, частично в виде скомпилированной dll. NWP>Библиотека в онлайн не работает ни как, только офлайн. NWP>На данный момент защита встроена в dll. Она элементарная и заключается в следующем: NWP>Для работы с АПИ его необходимо проинициализировать. В функцию инициализации передается серийный номер. Внутри функции инициализации проверяется валидность ключа, и если он не валиден или отсутствует, то переходим в режим работы trial. В этом режиме либа смотрит в реестр и если там нет спец. записи, то выводит в модальном режиме окно, с просьбой приобрести лицензию, либо напомнить позже. Тут важно, что именно в модальном режиме. То есть выполнение инициализации блокируется, пока юзер не нажмет какую либо кнопку. Если юзер жмет на 'напомнить позже', то окно на несколько часов скрывается и не мешает программисту работать.
на чем у вас это написано все, на C#, C++ или чем-то еще?
Здравствуйте, MikePetrichenko, Вы писали:
MP>Здравствуйте, NWP, Вы писали:
NWP>>Каждый месяц обращается несколько человек с подобным вопросом. А сколь просто молча проходят мимо?
MP>Из сервиса достучаться до Desktop тоже не особая проблема. Там и показать окошко.
До которого из десктопов? Ведь залогиненых может быть N пользователей, и M из них могут быть заинтересованы в софте топик-стартера.
M < N вполне себе кейс. Ну и не надо забывать про последовательное закручивание гаек в плане интерактивности сервисов, на свежих виндах акромя IPC уже и вариантов не остаётся (но для этого надо под юзер-аккаунтами что-то тоже пускать).
Когда трайл истекает, то клиент получает callback, после чего все API calls начинают возвращать еггог. Чего мудрить то с какими-то модальными окнами и прочей чепухой.