# 通過 Launch 與 Licentivo 接入應用

本指南適用于 Licentivo 提供方。不使用 Licentivo、而對接商戶自有授權系統時，應使用[自定義授權 API 與接入流程](/zh-hant/launch-documents/external-licensing/)，為產品和環境選擇 `custom_http`，并保留該系統的運行時 SDK。

這些尚未發布的本地改動使用帳號身份交換。遷移及服務端會話撤銷參見[職責與購買同步契約](/zh-hant/launch-documents/account-purchase-boundary/)。本次改動沒有發布或升級包版本號。

Launch 負責商戶帳號、訂單、價格、續費和升級報價、退款及絕對購買日期。Licentivo 負責許可證、策略、設備額度、授權會話、簽名許可和運行時決定。Launch 登錄成功或購買同步成功，絕不表示可以執行受保護業務。

使用后臺接入頁取得直接連接調用和固定受信的產品公鑰。九種語言包裝層均包含官方 SDK。商戶管理密鑰和支付密鑰留在服務端。公開產品設置不包含客戶憑據、設備 ID、快取路徑或身份斷言。

## 帳號交換

```mermaid
sequenceDiagram
    participant App as Application
    participant Launch as Launch server
    participant SDK as Official Licentivo SDK
    participant Lic as Licentivo server
    App->>Launch: Account login
    Launch-->>App: Account session
    App->>Launch: POST /software/products/{id}/identity
    Launch-->>App: Short-lived signed identity assertion
    App->>SDK: In-memory identity + connection + environment
    SDK->>Lic: POST /launch/exchange
    Lic-->>SDK: Restricted device credential + signed permission + logout ticket
    App->>SDK: RunFeature around every protected action
```

包裝層使用 `{"environment":"sandbox"}` 或 `live` 請求 `POST /api/v1/software/products/{id}/identity`。返回的身份斷言最多存活 120 秒，綁定已注冊簽發者、受眾、真實登錄會話、產品、環境和購買引用。它不包含功能許可、設備額度或離線策略。

官方 SDK 在內存中接收以下值：

```json
{
  "product_id": "LICENTIVO_PRODUCT_UUID",
  "trusted_keys": {"SIGNING_KEY_ID": "PINNED_PUBLIC_KEY"},
  "launch_connection_id": "LICENTIVO_LAUNCH_CONNECTION_UUID",
  "environment": "sandbox",
  "identity_token": "SHORT_LIVED_ASSERTION_FROM_LAUNCH",
  "license_key": ""
}
```

不得將此運行時配置寫入公開文件，或將身份斷言持久化到帳號記錄。Launch v2 記住登錄記錄只保存帳號會話和公開路由上下文。舊客戶 `/credential` 接口返回 HTTP 410。

## 生命周期與存儲

- `Login`：認證帳號、申請新身份斷言、啟動官方 SDK。
- `Restore`：聯網確認已記住的帳號、申請新身份斷言、啟動官方 SDK。Launch 故障不決定離線許可。
- `RunFeature`：每次受保護執行都交給官方 SDK。被拒絕的回調絕不能執行。
- `Close` / `Dispose` / `Drop`：停止后臺工作，保留明確記住的登錄和節點綁定。
- `Logout`：調用官方 SDK 統一退出，再清除 Launch 帳號記錄并終止其帳號會話。
- `ReleaseDevice`：明確退出的兼容別名。必須如實報告待完成的遠端撤銷。

只有官方 SDK 可刪除其設備憑據和租約文件。絕不能刪除快取目錄或 `.logout.json`；該日志保存網路請求失敗后仍需使用的受限釋放票據。再次初始化匹配快取時，SDK 會恢復待處理票據。Launch 自有帳號存儲與 SDK 存儲分別由各自管理。

需要離線啟動的應用使用官方 SDK 文件規定的恢復流程。只有 SDK 驗證簽名許可、產品與環境上下文、到期、時鐘行為和設備狀態。Launch 包裝層不從購買日期、本地訂單或文件存在與否推斷許可。

帳號會話預設只保存在內存。持久帳號存儲必須加密并認證記錄，使用操作系統憑據設施保護密鑰。按商戶、帳號、產品和環境使用獨立可寫快取。瀏覽器渲染進程只接收業務結果，不接收桌面帳號令牌、身份斷言或設備憑據。

## 購買與設備

Launch 根據已驗證付款和不可變訂單覆蓋計算絕對購買日期，再向 `/api/v1/launch/connections/{id}/events` 發送帶版本快照。輪詢事件直至 `applied`；接收回執本身不是交付。續費和退款重試不能再次增加時長。退款只移除對應訂單覆蓋；全額退款后重新購買會使用新引用。

無法訪問某臺設備的用戶可打開 Launch 設備管理頁。列表、剩余解綁次數、允許動作和操作結果均來自 Licentivo。釋放請求攜帶界面顯示的綁定代次及不變的操作 ID。Launch 不另建競爭性的解綁計數器或任務執行器。

## 驗證與限制

測試帳號交換、身份斷言臨時存儲、SDK 控制的功能執行、普通關閉、新進程明確退出、待處理釋放日志和產品與環境隔離。官方 SDK 的真實簽名租約、離線檢查和篡改拒絕應與 Launch 帳號傳輸分別測試。編譯和夾具不能證明生產驗收通過。

Launch 還使用 Licentivo V39 的 `session-revocations` POST 和回執 GET 接口，處理桌面退出、強制會話退出、密碼修改和帳號禁用。原接收方與請求持久固定，響應丟失后可恢復，各環境獨立確認。帳號范圍通知待完成時暫停新的桌面認證；確認后，真正新登錄的 `auth_time` 必須嚴格晚于最新 `revoked_before` 截止秒。網站恢復仍可用。這些通知絕不改變購買日期。參見[職責與恢復契約](/zh-hant/launch-documents/account-purchase-boundary/)。

參見[手動接入](/zh-hant/launch-documents/manual-integration/)、[AI 接入](/zh-hant/launch-documents/ai-integration/)、[接入包](/zh-hant/launch-documents/integration-packages/)和[驗收](/zh-hant/launch-documents/acceptance/)。
