跳到正文
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。