1. 選擇允許離線的策略
適用於首次啟用也無法連線的客戶電腦。策略必須允許裝置綁定模式的離線啟用;浮動工作階段無法使用此流程首次啟用。
啟用 export 功能,選擇允許離線時間,產生含產品簽章公鑰的 product.json。授權金鑰由客戶輸入。定期授權從伺服器核准啟用時開始計時,而非回應檔案匯入時。
2. 安裝原生 SDK
在 SDK 文件選擇 C 或 C++、作業系統與官網版本安裝指令,以產生的 CMake 相依設定連結專案。原生核心需要相容的編譯器、libcurl 與 OpenSSL;C++ 需要 C++17。
以下範例使用 licentivo.hpp 與 CMake 目標 Licentivo::CPP。整合套件已包含原生示範目標。將 product.json 放在程式旁,或於正式應用程式使用絕對路徑。
使用預先編譯的 CMake 套件時,可用以下 CMakeLists.txt。執行 cmake -S . -B build -DCMAKE_PREFIX_PATH=SDK_PREFIX,將 SDK_PREFIX 換成安裝器輸出的 CMake prefix 路徑,再執行 cmake --build build --config Release。原始碼套件則依安裝器說明使用 add_subdirectory,取代 find_package。
cmake_minimum_required(VERSION 3.18)
project(offline_app LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
find_package(Licentivo 0.10 REQUIRED)
add_executable(offline offline.cpp)
target_link_libraries(offline PRIVATE Licentivo::CPP)3. 用 SDK 匯出申請與匯入回應
將範例存為 offline.cpp,加入已設定 SDK 的 CMake 專案。在離線電腦執行 offline request YOUR_LICENSE_KEY,產生 activation.request.json;過程不啟動連線用戶端。
把申請帶到連線電腦,在廠商控制台或已關聯電子郵件的客戶入口上傳申請,下載核准回應並命名為 activation.response.json。將申請與回應一同帶回原電腦,執行 offline import YOUR_LICENSE_KEY。
#include "licentivo.hpp"
#include <fstream>
#include <iostream>
#include <iterator>
#include <stdexcept>
#include <string>
std::string readText(const char* path) {
std::ifstream file(path);
if (!file) throw std::runtime_error("Cannot read file");
return {std::istreambuf_iterator<char>(file), {}};
}
int main(int argc, char** argv) {
try {
// product.json contains public settings; the key is entered by the customer.
if (argc < 3) throw std::runtime_error("Usage: offline request|import LICENSE_KEY");
licentivo::Client client("product.json", argv[2]);
if (std::string(argv[1]) == "request") {
std::ofstream file("activation.request.json");
file << client.OfflineRequest();
if (!file) throw std::runtime_error("Cannot save request");
std::cout << "Created activation.request.json\n";
} else if (std::string(argv[1]) == "import") {
client.ImportOffline(readText("activation.request.json"),
readText("activation.response.json"));
client.RunFeature("export", [] {
std::ofstream file("licensed-report.txt");
file << "Licensed offline export\n";
if (!file) throw std::runtime_error("Cannot save report");
});
std::cout << "Created licensed-report.txt\n";
} else {
throw std::runtime_error("Unknown operation");
}
} catch (const std::exception& error) {
std::cerr << error.what() << '\n';
return 1;
}
}4. 確認啟用結果
- 確認匯入成功且產生 licensed-report.txt。
- 以相同快取位置及儲存的裝置憑證重新啟動;仍有效的離線租約應允許已授權功能。
- 在另一台一般電腦匯入相同回應,裝置驗證應拒絕。
- 檢查授權到期時間與離線時間。匯入檔案不會延長原授權,也不能超出簽章允許範圍。
使用 C 介面
C 應用程式以 ln_init_file_with_license 建立未啟動的用戶端,透過 ln_offline_request 產生申請,呼叫 ln_import_offline 驗證及匯入。回傳字串以 ln_free_string 釋放,結束以 ln_destroy 關閉。整合套件中的 C 示範包含這些呼叫。
完全離線首次啟用不要呼叫 Start 或 ln_open,這些啟動介面會嘗試連線。業務程式碼無須自行解析與驗證簽章。
常見失敗與使用限制
回應無效可能是申請、產品、裝置、簽章公鑰或應用程式版本不符。必須帶回產生申請的電腦,不可修改 JSON 內容或停用驗證。
申請到期須重新產生並核准。離線租約到期須依策略續期或再次交換核准檔案。完全離線時無法進行線上計次的預留與確認。
遠端解除綁定或撤銷須等舊裝置下次連線檢查才會得知。永久離線的裝置無法立即得知伺服器變更,設定允許離線時間時應考慮此限制。