MIP DESKTOP · 扩展开发
权限与身份
按需声明权限,正确处理身份、授权与后台请求。
权限分为清单声明、宿主能力和实际调用校验。页面成功打开不代表可以访问登录身份、后台或本地资源。
按需声明权限
| 需求 | 必要声明或前提 |
|---|---|
| 展示扩展页面 | webview,以及 View 与入口映射 |
| 读写扩展私有存储 | storage |
| 获取最小登录身份 | identity.read |
| 调用平台后台 | http 与 contributes.api |
| 访问扩展自有后台 | http 与 contributes.backends,以及已配置端点 |
| 显示通知 | notification |
这不是全部权限的枚举。高级能力应查阅匹配版本的公开契约,避免预先申请所有权限。
读取当前身份
在完整 Manifest 中加入所需权限:
{
"permissions": ["webview", "identity.read"]
}
WebView 使用 SDK 的身份接口:
const result = await sdk.session.getContext();
if (result.code !== 1) {
throw new Error(result.message || '无法读取当前身份,请确认登录与授权。');
}
const user = result.data?.user;
const unit = result.data?.unit;
if (!user || !unit) {
// 展示未登录或未选择单位的状态。
}
身份上下文包含必要的用户、单位标识与名称,不包含 Desktop Token。不要读取宿主 localStorage、复制 userInfo 或缓存登录凭据来绕过接口。
监听身份变化时应更新页面状态并释放旧监听;切换用户或单位后,扩展自己的业务数据也应按业务权限重新加载。
区分两类后台请求
平台后台通过 sdk.api.call() 调用清单允许的平台命令,由宿主复用当前登录会话。声明中需同时包含命令和正确后缀:
{
"permissions": ["webview", "http"],
"contributes": {
"api": [
{ "command": "Example.List", "suffix": "/sys" }
]
}
}
Example.List 是说明命令声明方式的占位名称,按实际已开放命令替换,不能直接调用。
扩展自有后台通过 sdk.api.request() 等公开传输访问已声明的后端,由扩展发布方负责自身认证。端点由受控部署配置解析,Manifest 不携带环境地址,也不会自动获得 Desktop 的认证头。
这两类请求与扩展本地命令不是同一个接口,不能互相替换。
处理失败与兼容
按以下顺序排查:目标宿主是否支持该接口、Manifest 是否声明权限、贡献或端点是否完整、登录和单位上下文是否有效、实际返回是否成功。
能力不存在、未授权与后台失败应分别给出提示。不要把所有失败都提示为“请重新登录”,也不要在调用失败后直接回退到 Electron、Node、任意网络地址或其他扩展的数据。
出现“桌面会话同步失败”或身份读取失败时,重点核对 identity.read 和实际承载方式:.mipx 看扩展 Manifest;普通 Web 应用看平台应用授权,不能套用扩展清单。
基础契约:Extension API 1.x;具体能力以目标 Desktop 发行版为准。