实施30天的计时试验
问题的独立Mac开发人员在那里:
我如何以非邪恶的方式实施30天的计时? 在首选项中添加一个计数器不是一个选项,因为一个月擦一次prefs对普通用户来说不是问题。 把计数器放在隐藏文件的地方听起来有点狡猾 – 作为一个用户,我讨厌当应用程序洒我的硬盘随机文件。 有任何想法吗?
这个问题在cocoa-dev邮件列表上反复出现,一致的答案总是尽可能地做到最简单的事情。 确定的黑客将打破所有,但最过度devise的解决scheme。 而且他们不太可能为软件付费。 去80/20解决scheme:20%的努力获得80%的效果的简单的解决scheme。 在这种情况下,把东西放在〜/ Library / Application Support / your.app.com /中。 如果你想混淆一些东西,你可以命名这个文件是无辜的。 使用用户默认也很容易。
无论您做什么, 都不要使用MAC地址或其他硬件ID。 具有networking主目录的用户(例如,在共享的实验室设置中)会恨你。 使用硬件ID只是邪恶的。
如果有人爱上你的节目,他们愿意打破你的试用限制,让他们。 免费软件花费你什么都没有,他们的善意(也许推荐给别人)是值得的。
最后,编写人们想要使用的软件,并为其价值定价。 如果你的价格是一个很好的价值和人们想要使用它,大多数人会付出代价。
我build议实施一些不那么干扰的事情,并且可能会避免一个普通用户在一个月的时间内卸载或购买。
- 使用一系列的试用序列号来存储有效期限。 您可以使用encrpytion在序列号中存储到期date。
- 现在创build一个configuration文件,以encryption格式存储数据并包含序列号。
另外在configuration文件中实现这些东西。
- 每次用户启动应用程序时记下时间/date。
- 请注意应用程序的打开时间。
通过logging时间戳,可以避免这些变通办法:
- 如果用户反转计算机date,则会知道该应用程序已在当天运行。 假设用户在一个月的第1天和第3天运行应用程序。 现在30天后,将date调整到月份的第二个月份。 现在通过configuration文件,你会知道该应用程序已经在1和3上运行,所以用户已经搞砸了计算机上的date。
- 比方说,每次用户启动您的应用程序,首先设置date到本月5日。 通过logging你的应用程序的运行时间,你会发现如果一天中的总时间超过24,那么用户就在玩弄。
确保您的应用程序不会在没有configuration文件的情况下运行。 所以,基本上你可以将encryption的序列号发送到一个文件中,也可以在input序列号时创build文件。 由于序列号已经有了有效期限,用户也不能重复使用序列号。
我不会build议互联网的方式,因为每当应用程序尝试连接到服务器时,人们都生气。 此外,您可能会怀疑您尝试将某些用户的个人数据发送到您的服务器。
有一件事我想说:不pipe你使用的反盗版技术有多强大,都有人打破它。 你不是为你的应用程序。 你正在为喜欢你的软件的人开发你的应用程序,并且乐意购买它。 因此,在试用期间,您的应用程序的侵权行为不会让真正的客户失去真正的客户。 一个想法也说,如果你的软件被破解,这意味着它也越来越受欢迎。 再次的意见可能会有所不同,并不想在这些问题上离题。
考虑这个。 你的软件有多less潜在用户在那里,只是渴望在接下来的30天内坚定地使用它?
我怀疑更正常的情况是:用户遇到一个新的软件包,可以解决他们在像lifehacker.com这样的网站上遇到的问题。 软件被下载,简单地玩,然后放在一边。 也许它的MP3抓取软件,他们没有任何CD在当时撕裂。 或者那天他们只是忙碌,但他们会很快回顾这个软件。
30天过关。 可能更多。 只有他们买了一张CD,遇到某种“问题”,记住,“啊哈,我下载了试用版! 我又把它放在哪里? 没关系。 没有被使用,“审判”已经超时。
我无法统计已经落入这个桶的软件工具的数量。 当我推荐一个软件的那一天,当我看到lifehacker的一个积极的评论的那一天,从来没有一天,我实际上有一个需要,甚至是时间来使用/分析我下载和安装的程序。
让软件在30个日历日后过期是不好的,因为如果有人下载它,运行一次,然后决定他们会在一个月后评估它? 下一次他们启动它,一个月后,它会说它已经过期。
我会把它限制在14次发射,或者120分钟的使用。
至于实现,用户的首选项文件夹中的文件(隐藏或不包含),名称模糊,似乎是最好的方法。 该文件不是随机放置在硬盘驱动器上,但用户不能轻易找出要删除的文件。
最恶劣的方法是让用户在一个月后删除该程序或付费;)
我们为我们的一个客户端应用程序做了这个。 当然,这是在.NET for Windows中完成的,但是也可以在MAC中应用相同的原则。
像eckesickle提到,如果你的用户可以访问互联网(或应该),那么你可以有一个Web服务,将注册一些唯一的ID从主机与开始date试用(MAC地址是一个很好的)。 有了这个,用户不能真的欺骗程序,除非他每月都有机会获得网卡。
现在,如果用户由于某种原因无法访问Internet,则可以closures程序,直到连接到Internet或使用宽限期。 该文件logging了上次打开该应用程序的时间。 当互联网不可访问时,我们停止写时间(我们仍然在写东西,所以用户不会注意到文件没有更新)。
如果用户注意到这个文件包含了这个信息并且删除了它(或者用一个他所拥有的副本来改变它),那么你需要一个方法来解决这个问题。 你可以在另一个configuration文件(总是encryption)有一些其他的价值,并检查一致性。 如果您发现用户试图欺骗您所做的事情取决于您,但是我们强制用户连接到互联网以使其工作。
这可能是一个程序矫枉过正,但它确实有效。
在下载时,给他们提供一个试用序列号。 当他们input序列号时,请连接到您的服务器并获取到期信息(本地存储和encryption以防止任何额外的“电话本地”呼叫)。
通过这样做,您可以很容易地避开30天的窗口,因为到期date永久存储在服务器上。 您可以进行设置,因此删除密钥并重新input将导致您的应用程序再次连接到您的服务器,并像以前一样下载相同的到期date。
或者,您可以像WinZip那样做(或者曾经这样做):提供30天的试用版,并在每次加载时popup一个屏幕,显示您使用它的时间以及购买链接。
我曾经提供一个为期30天的我的iOS应用程序精简版,将安装date和各种loggingdateembedded到用户可以下载到他/她的计算机的导出数据文件中。
如果用户是一个吝啬鬼,只是重新安装lite版本,并试图重新导入数据,逻辑会注意到,至less有一个date是30天以上,该应用程序将其安装date设置为从该文件,使其再次过期。
在全付费版本中,这个逻辑不存在,数据文件可以很容易地导入。
在这个数据迁移过程中,这是一个支持人们的痛苦(因为应用程序完全是相互之间的沙盒),而其他一些用户觉得lite版本已经足够,所以他们从来没有升级过。
我从此停止提供我的精简版,只是降低了完整版的价格。 现在,潜在客户只需支付less量费用就可以find一些竞争对手的软件。
总而言之,这是获得用户付费的最佳策略。
从某个硬件组件读取UUID,并检查您的Web服务,看看您的软件在启动时是否已经安装了30天?
- 我们如何在ASP.NET MVC中设置整个区域的授权?
- Node.js应用程序的授权方法和devise模式
- 用户界面中的未授权操作是否应该隐藏,禁用或导致错误?
- 保护REST API / Web服务的最佳实践
- 为什么AuthorizeAttributeredirect到login页面以进行身份validation和授权失败?
- 如何使Authorize属性返回自定义403错误页面而不是redirect到login页面
- 如何在Spring Security中dynamic决定<intercept-url>访问属性值?
- 在ASP.NET MVC中redirect未经授权的控制器
- ASP.NET MVC – 替代angular色提供者?