添加页面与设置项
注册主页面、设置页或设置分组,使用与内置页面相同的注册助手与导航元数据。
插件可以加页面、加服务、加悬浮窗按钮,也可以通过受控入口发起抽取。 它不能绕过授权、不能直接写历史,也不能替换证明链。
一个插件就是一个 .srpx 包:本质上是 ZIP,根目录放一份 manifest.yml,入口程序集里有一个非抽象的实现类。
id: com.example.hello
name: Hello Plugin
description: 一个最小插件
version: 1.0.0
apiVersion: 3.0.0
entranceAssembly: HelloPlugin.dll
author: your-name
icon: icon.png
permissions: [UserInterface]
注册主页面、设置页或设置分组,使用与内置页面相同的注册助手与导航元数据。
在 Initialize 中向宿主注册自己的服务与 Core 扩展,参与依赖注入。
在运行时注册悬浮窗按钮;是否显示由用户在悬浮窗设置里勾选,插件消失时对应项会被清理。
通过 IPluginDrawService 发起点名或抽奖,授权、课程限制与事务提交都由宿主负责。
插件可用的稳定契约都在 Core 的 Abstract/Services 下,通过依赖注入获取。
| 契约 | 用途 |
|---|---|
| IMainView / ISettingsView / IDrawerView | 在 UI 线程上访问主界面、设置与抽取区域;空壳状态下是安全空操作 |
| IAppNavigationService | 打开主窗口、设置窗口或闪抽窗口,保留原有的安全授权闸门 |
| IAppLifecycleService | 转发应用启动与停止事件,供插件做初始化与清理 |
| IFloatingWindowButtonRegistry | 运行时注册悬浮窗按钮与其描述 |
| IPluginDrawService | 受控抽取入口:先授权,再复用点名 / 抽奖的完整流程 |
插件可以手动安装 .srpx 包;如果使用可选的在线索引,索引与每个安装包都要经过校验:
整个索引用 Ed25519 签名;客户端内置公钥,先验签再读取条目。
按拓扑顺序解析插件依赖,检测循环;缺少依赖或版本不兼容时明确报错,而不是装上一半。
每个包在安装前校验 SHA-256,然后交给插件管理器走统一的暂存与激活流程。
用完整应用版本判断最低宿主版本;插件声明的 API 主版本必须与应用主版本一致。
在线索引只是获取插件的一种方式。用本地包安装走完全相同的校验与暂存流程,不需要账号或登录。
用 SDK 构建,把输出目录压缩为 .srpx,并确保 manifest.yml 位于包根目录。
# 1. 引用与宿主主版本匹配的 SDK
dotnet add package SecRandom.PluginSdk
# 2. 构建
dotnet build -c Release
# 3. 打包:manifest.yml 必须在压缩包根目录
Compress-Archive -Path .\bin\Release\net10.0\* -DestinationPath .\HelloPlugin.zip
Move-Item .\HelloPlugin.zip .\HelloPlugin.srpx