跳到正文
LICENTIVO / INTEGRATION

在 Go 應用程式中整合軟體授權

安裝 Go SDK,以客戶授權金鑰啟用,並保護一次實際的檔案匯出。裝置身分、簽章驗證、憑證儲存與心跳由 SDK 管理。

已有 Go 環境時約 15 分鐘更新日期

1. 準備產品與授權

適用於需要綁定裝置的桌面工具、命令列程式或服務。先以不計次的 export 功能驗證授權流程,再加入功能次數規則。

  1. 安裝 Go 1.26 或更新版本,在控制台開啟「快速接入」並建立產品。
  2. 在產品授權策略中啟用名為 export 的功能,建立或選擇測試授權。
  3. 下載已設定的 Go 整合套件。product.json 是產品公開設定;sdk-demo.json 含測試金鑰,不可放入客戶安裝套件。

2. 安裝到自己的專案

開啟 SDK 文件,選擇 Go 與作業系統,在專案目錄執行官網的版本安裝指令,使用安裝器產生的本機模組相依設定。匯入路徑為 github.com/spf86/licentivo-sdk;安裝器提供此獨立模組,因此範例不依賴 GitHub 發布。

整合期間固定套件版本。執行 go list -m github.com/spf86/licentivo-sdk 檢查模組,將自己的 product.json 放在程式工作目錄。

新專案可執行以下指令;已有 go.mod 的專案略過第一行。使用自己從控制台下載的 product.json。儲存下一節的 main.go 後,設定 LICENTIVO_LICENSE_KEY 再執行 go run .。

Windows · PowerShell
go mod init example.com/licensed-app
Invoke-WebRequest 'https://www.licentivo.com/assets/sdk/releases/v0.10.0/install.ps1' -OutFile install-licentivo.ps1
./install-licentivo.ps1 -Language go -Version 0.10.0
Linux / macOS · Bash
go mod init example.com/licensed-app
curl --fail --location --proto '=https' --proto-redir '=https' --tlsv1.2 \
  -o install-licentivo.sh \
  'https://www.licentivo.com/assets/sdk/releases/v0.10.0/install.sh'
bash install-licentivo.sh go --version 0.10.0

3. 保護一次實際操作

將以下完整程式存為 main.go。以 LICENTIVO_LICENSE_KEY 傳入測試金鑰,正式應用程式可改為啟用輸入欄位。安裝後執行 go run .;成功會產生 licensed-report.txt。

Go · 完整 main.go
package main

import (
    "context"
    "fmt"
    "os"

    licentivo "github.com/spf86/licentivo-sdk"
)

func run() error {
    ctx, cancel := context.WithCancel(context.Background())
    defer cancel()
    client, err := licentivo.OpenWithLicense(ctx, "product.json",
        os.Getenv("LICENTIVO_LICENSE_KEY"),
        func(err error) { fmt.Fprintln(os.Stderr, "License refresh:", err) })
    if err != nil {
        return err
    }
    defer client.Close()
    err = client.RunFeature("export", func() error {
        return os.WriteFile("licensed-report.txt", []byte("Licensed export\n"), 0600)
    })
    if err != nil {
        return err
    }
    fmt.Println("Created licensed-report.txt")
    return nil
}

func main() {
    if err := run(); err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }
}

4. 在應用程式生命週期中保留一個用戶端

正式應用程式在啟動時建立用戶端,將 RunFeature 放入匯出按鈕或命令處理函式,結束時才呼叫 Close。一般裝置綁定授權會保留註冊,SDK 則停止背景工作。

首次啟用成功後,SDK 儲存綁定本機的憑證。往後以相同使用者和快取位置啟動,可傳入空金鑰恢復。無須自行管理 activation_id 或傳送 HTTP 心跳。

仍有效的裝置綁定離線租約可立即恢復,再由 SDK 於背景更新。浮動或必須連線的策略需要伺服器成功回應。背景錯誤紀錄不可用來略過功能檢查。

5. 驗證允許與拒絕的操作

  1. 帶測試金鑰執行,確認產生匯出檔案。
  2. 移除 LICENTIVO_LICENSE_KEY,以相同使用者再次啟動,驗證儲存憑證恢復。
  3. 將 export 改成授權沒有的功能,確認回傳錯誤且沒有執行匯出。
  4. 僅在策略允許且簽章租約仍有效時,檢查離線重新啟動。

常見整合問題

找不到設定時,檢查 product.json 是否在目前工作目錄。從桌面捷徑啟動,可傳入設定檔的絕對路徑。

功能被拒絕時,檢查功能名稱與授權策略。RunFeature 只檢查權益,不檢查剩餘次數;計次功能使用 RunMeteredFeature。

裝置超限、授權到期或伺服器明確拒絕,需要客戶或廠商處理授權。顯示錯誤及可用的請求編號,不可把廠厂商管理 API Key 放入應用程式。