Skip to main content

LicenseWindow:应用授权与激活组件

LicenseWindow 是一个内置的 UI 组件,用于为开发者提供标准化的授权激活流程。它集成了后端接口调用、本地 KeyValue 缓存管理以及严格的权限“守门员”逻辑。


1. 导入模块

# 导入授权窗口类
from ascript.windows.ui import LicenseWindow

2. 核心逻辑与方法

🏗️ 初始化 __init__()

初始化授权窗口并绑定相关的后端接口。

代码块:

window = LicenseWindow(app_id)

参数详解:

  • app_id (str): 在 AScript 管理后台申请的应用唯一 ID。

🛠️ 暴露给前端的接口 (Exposed Methods)

.get_app_info()

从服务器获取当前应用的基本信息(如名称、是否免费等)。

  • 返回:包含应用信息的字典,失败返回错误提示。

.get_cached_key()

获取本地缓存中存储的上一次激活码。

  • 返回:字符串格式的激活码。

.activate_key()

执行激活逻辑。

  • 参数详解key (str) - 用户输入的激活码。
  • 流程:验证成功后会自动将激活码缓存至本地,并存储授权详细数据。

.start_app()

权限守门员逻辑。这是进入主程序的最终校验点。

  • 逻辑说明
    1. 若应用设置为免费版,直接放行并关闭窗口。
    2. 若为授权版,严格校验 status 是否为 1(有效)。
    3. 校验失败将拦截启动,并返回错误信息。

3. 授权状态说明

在授权校验过程中,license_data 中的 status 字段定义了当前授权的生命周期:

状态码 (Status)说明处理结果
1授权有效允许进入程序
2授权已过期拦截并提示重新激活
None / 其他未激活或验证失败拦截启动

💡 综合使用案例

通常在脚本入口处使用 LicenseWindow,通过其返回值决定是否继续执行业务逻辑。

from ascript.windows.tools import LicenseWindow

def main():
# 1. 创建授权窗口,传入你的 AppID
auth_win = LicenseWindow(app_id="your_app_id_123")

# 2. 显示窗口(此操作会阻塞,直到调用 start_app 或关闭窗口)
# 内部会自动加载内置的 license_window.html 界面
auth_win.show(title="软件授权激活", width=400, height=500)

# 3. 校验最终结果
# 只有当用户在界面点击“启动”且通过 start_app 逻辑校验时,_return_value 才为 True
if auth_win._return_value:
print("授权通过,正在启动主程序...")
# 此处编写你的主业务逻辑
else:
print("授权未通过或用户取消了操作。")

if __name__ == '__main__':
main()

4. 技术特性

  • 💾 自动缓存:使用 KeyValue 模块自动记录激活码,用户下次打开无需重复输入。
  • 🔒 安全校验start_app 方法作为逻辑终点,确保了即使前端 UI 被破解,后端验证逻辑依然稳固。
  • 🎨 内置 UI:该类已默认关联了 license_window.html 布局,开发者无需自行编写 HTML 即可快速集成授权功能。

注意事项

请确保在调用 show() 之前,网络环境正常,否则 get_app_info 可能会因为无法连接服务器而导致界面显示异常。