# License 安装与生命周期

> 选择 SDK 能力、安装已签发的 Chrovia License、检查状态，并正确替换或撤销授权。

Source: https://console.getchrovia.com/zh/docs/sdk-license

**Chrovia License** 是浏览器实例的已签名授权文件，不是扩展、EP 文件或登录会话。所有 SDK 能力都使用同一套授权模型。

## 获取合适的 License

在 Console 中[创建试用 License](https://console.getchrovia.com/zh/docs/trial-license)或[购买商业 License](https://console.getchrovia.com/zh/docs/commercial-license-billing)，选择集成所需的操作系统和[能力](https://console.getchrovia.com/zh/docs/sdk-capabilities)。平台标识为 `windows`、`macos`、`linux`；获得某平台授权不代表该平台一定已有可下载的浏览器发行包。

能力是区分大小写的布尔字段，例如 `payload.entitlements.networkIntercept: true`。License 还包含许可证 ID、被授权方、到期时间、平台列表，以及可选的内核主版本限制。这些都是已签名字段，不是下载后可以自行编辑的设置。

授予能力不一定等于启用功能。例如 `disableDevTools` 还需要 EP `internal.disable_devtools: true`。`extendedPrefs` 与 `signedExtendedPrefs` 是不同能力：前者开放 prefs API 和受支持的 Profile 偏好覆盖，后者要求验证 EP 签名。

## 安装文件

完全退出实例后，原样复制已签发文件。文件名必须是 `Chrovia License`，不能带 `.json` 或 `.txt` 后缀。

| 位置 | 行为 |
| --- | --- |
| `<用户数据目录>/Chrovia License` | 优先读取，适用于该实例目录 |
| `<Provision 根目录>/Chrovia License` | 只读回退来源，仅在实例文件不存在时使用 |

用户数据目录是 `--user-data-dir` 指定的根目录，不是其中的 `Default` 子目录。已存在但无法读取或无效的文件不会回退到 Provision License。各平台根目录位置见 [Provision 目录](https://console.getchrovia.com/zh/docs/sdk-provision)。

按 [SDK 开发入门](https://console.getchrovia.com/zh/docs/sdk-getting-started)使用独立的绝对用户数据路径。如果两个位置都没有 License，受授权控制的能力保持不可用；删除文件不会解锁 SDK。

## 核对已签发的授权

根据部署需要核对 License ID、被授权方、到期时间、允许的平台、能力，以及可能存在的 Chromium 主版本限制。版本范围包含上下边界。如果有误，应申请替换文件，不要编辑下载的文件。

只有签发时包含 `noLease: true` 的 License 才免除在线租约要求。如果授予了 `signedExtendedPrefs`，还应通过该部署的配置提供方获取匹配的已签名 Extended Preferences 文件。

完整 License 应保密，不要交给网站或输出到日志。检查状态请使用下面的 API。

## 只检查状态，不触发续租

在 Provision Service Worker 控制台中：

```js
const api = globalThis.chrovia?.license;
if (api) {
  const state = await api.get();
  console.log({
    valid: state.valid,
    requiresLease: state.requiresLease,
    licenseId: state.licenseId,
    leaseExpiresAt: state.leaseExpiresAt,
  });
}
```

`get()` 不消耗配额，也不会发起续租。`valid` 表示已加载的 License 状态，不是完整的实时授权结论。`leaseExpiresAt` 在启动初期可能是启动宽限期截止时间。在据此构建状态界面前，请阅读[租约](https://console.getchrovia.com/zh/docs/sdk-leases)。License API 没有单独的能力要求，但仍受执行上下文限制。

## 替换、到期与撤销

1. 需要更换能力、平台范围或有效期时，获取新签发的 License。
2. 完全退出浏览器实例。
3. 替换实例实际使用位置中的文件，再重新启动。
4. 如果开始要求 `signedExtendedPrefs`，或签名方发生变化，同时提供匹配的已签名 EP 文件。

运行进程会加载 License 状态和能力，替换文件不是热更新。Console 撤销会阻止后续在线租约申请，不是立即推送到所有浏览器，也不会远程撤销离线 `noLease` 进程。在线到期和终止性续租失败由[租约流程](https://console.getchrovia.com/zh/docs/sdk-leases)处理。

## 排查问题

- **JSON 或签名无效：**恢复未经编辑的下载文件并核对文件名。
- **操作系统或内核不匹配：**申请覆盖真实运行平台和 Chromium 主版本的 License。
- **能力返回 undefined：**同时检查已签发能力和 JS 执行上下文。
- **License 有效但出现锁定提示：**检查 Infra 续租错误、网络、配额及撤销状态。
- **替换 Provision 文件无效：**检查用户数据目录是否有优先级更高的 License。
