如何为我的Python应用程序设置试用期?
我用kivy做了一个桌面应用程序,并且能够用pyinstaller打包成一个单独的可执行文件(.app)。现在我想把这个应用程序提供给客户,试用期大约是10天。
问题是,如何制作一个试用版,让它在安装后10天停止工作,即使用户在试用期结束后卸载再重新安装,它也应该无法使用。试用版提供部分功能也不是一个选项。
环境:
Mac OS 和 Python 2.7,使用Kivy
3 个回答
我的想法是:
- 在数据库里创建一个表格。
- 使用datetime模块,把系统当前日期放到这个表格里,作为开始日期。
- 使用timedelta模块,设置timedelta(15)(这里我用的是15天的试用期),计算出程序需要到期的日期,并把这个到期日期存到数据库的表格里。
- 每次你的应用程序启动时,加入一个逻辑,检查当前日期是否和到期日期匹配。如果匹配,就显示一个错误,提示你的程序已经过期。
注意:确保开始日期和到期日期的设置只运行一次,否则日期会一直被更改。
1) 你可以在应用程序中写死一个时间戳,过了这个时间戳后应用就会停止工作。每次运行时检查一下当前时间是否超过这个时间戳。如果你只有一个客户或者几个客户,这种方法是可行的,你还可以为每个客户制作不同日期的试用版本。
2) 使用一些平台或软件开发工具包(SDK)来管理许可证,比如https://cryptolens.io/,或者其他类似的工具。
3) 自己写一个解决方案,可能如何生成和验证软件许可证密钥?这个链接会对你有帮助。
要让这个系统正常运行,你需要一个网络服务器和一个数据库。
- 在你的数据库里创建一个 licenses 表。
- 每次有新客户购买你的软件或者申请试用时,你就生成一个新的随机长许可证,把它放进 licenses 表里,并把它和客户的邮箱地址关联起来,然后通过邮件发送给客户。
- 每当客户尝试在他们的电脑上安装软件时,你会要求输入许可证,并联系网络服务器确认这个许可证是否存在且仍然有效。
不过这样的话,人们还是可以创建多个邮箱,从而可能获得无限的试用版本。
你可以尝试在用户的电脑上某个没人会去找的地方放一个文件,把旧的许可证粘贴在里面。这样,当应用程序再次启动时(即使是重新安装),它就能从那里读取许可证,并联系网络服务器,而不需要再询问许可证。通过这种方法,当你的应用程序用过期的试用许可证联系服务器时,服务器可以回复一个“许可证过期”的信号,让应用程序知道现在必须请求一个非试用许可证,并且从此以后,服务器只接受来自这个应用程序的非试用许可证。如果客户发现你的应用程序是从本地文件获取这些信息的,他们可以直接删除那个文件,这样整个方法就失效了。
另一个想到的主意是把笔记本电脑的MAC地址(或者你能想到的其他唯一标识符)和一个许可证关联起来,而不是用邮箱地址。这个可以在创建许可证时(客户在申请试用时需要提供他的MAC地址)或者在安装时(你的应用可以检查它运行的笔记本的MAC地址)进行。