Ir al contenido
LICENTIVO / INTEGRATION

Agregar licencias de software a una aplicación Go

Instale Go SDK, actívelo con una clave de cliente y proteja una exportación de archivos real. El SDK gestiona la identidad del dispositivo, la autorización firmada, las credenciales guardadas y los latidos.

Unos 15 minutos con Go instaladoActualizado

1. Prepare un producto y una licencia.

Utilice esta ruta para una utilidad de escritorio, una aplicación de línea de comandos o un servicio que necesite una licencia de nodo bloqueado. Comience con una función de exportación no medida para que pueda verificar la licencia antes de agregar contadores de uso.

La cuota cuenta las activaciones actuales y se recupera al liberarlas. Las licencias normales cuentan sin conexión; las flotantes también liberan cuota al vencer su arrendamiento.

  1. Copia el ID del producto en Consola > Productos. Abre las claves públicas de firma del mismo producto y pega todos los pares ID de clave/clave pública en el código de inicialización, sustituyendo YOUR_PRODUCT_ID, YOUR_KEY_ID y YOUR_PUBLIC_KEY. La integración rápida puede generar este código. No hace falta un archivo de configuración; el SDK usa https://www.licentivo.com de forma predeterminada.
  2. Instale Go 1.26 o posterior. En la consola, abra Integración rápida y cree un producto.
  3. Habilite una función llamada exportación en la política de autorización del producto. Cree o seleccione una licencia de prueba.

2. Instale SDK en su proyecto

Instala el SDK 0.11.6 con el siguiente comando en tu proyecto o añade la dependencia de compilación. El gestor de paquetes obtiene el SDK; no necesitas descargar y extraer código fuente ni configurar rutas locales.

Terminal
go get github.com/spf86/licentivo-sdk@v0.11.6

3. Proteger una operación

Inicializa el SDK al iniciar o activar tu programa. Lee la clave del cliente en el formulario y pasa el ID del producto y las claves de confianza. Mantén el cliente hasta cerrar. Coloca RunFeature en la operación real y sustituye la exportación por tu propia función.

Go · complete main.go
// One protected operation. Keep the client alive for the lifetime of your app.
package main

import (
	"context"
	"fmt"
	licentivo "github.com/spf86/licentivo-sdk"
	"os"
)

// BEGIN LICENTIVO PRODUCT
// Copy Product ID and all key ID/public key pairs from Console > Products > Signing public keys.
const productID = "YOUR_PRODUCT_ID"

var trustedKeys = map[string]string{"YOUR_KEY_ID": "YOUR_PUBLIC_KEY"}

// END LICENTIVO PRODUCT

func setting(name, fallback string) string {
	if value := os.Getenv(name); value != "" {
		return value
	}
	return fallback
}

// Call this at the business entry point, including keyboard/menu/CLI actions.
func exportReport(path string) error {
	// Replace this write with your existing, non-metered export operation.
	return os.WriteFile(path, []byte("A report generated by the licensed application.\n"), 0600)
}

func run() error {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	// In a GUI, obtain key from the activation input. Later starts use an empty key.
	client, err := licentivo.OpenProduct(ctx, productID, trustedKeys, os.Getenv("LICENTIVO_LICENSE_KEY"), func(err error) {
		fmt.Fprintln(os.Stderr, "Background verification:", err)
	})
	if err != nil {
		return err
	}
	defer client.Close() // Floating seats return; node-locked registration stays.
	feature := setting("LICENTIVO_FEATURE", "export")
	path := setting("LICENTIVO_OUTPUT", "licensed-report.txt")
	action := func() error { return exportReport(path) }
	if os.Getenv("LICENTIVO_METERED") == "1" {
		err = client.RunMeteredFeature(ctx, feature, 1, os.Getenv("LICENTIVO_OPERATION_ID"), action)
	} else {
		err = client.RunFeature(feature, action)
	}
	if err != nil {
		return err
	}
	fmt.Printf("License OK: %s is available\nExport completed: %s\n", feature, path)
	return nil
}

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

4. Mantenga un cliente durante toda la vida útil de la aplicación.

En una aplicación real, abra el cliente al inicio y coloque RunFeature dentro del botón de exportación o controlador de comandos. Mantenga vivo al cliente hasta el cierre. Cerrar detiene el trabajo en segundo plano; conserva el registro ordinario bloqueado por nodos.

El SDK almacena una credencial vinculada a la máquina después de la activación. Los inicios posteriores pueden pasar una clave vacía y restaurarla desde la misma cuenta de usuario y ubicación de caché. No necesita almacenar ID de activación ni enviar usted mismo HTTP latidos.

Una concesión fuera de línea válida con un nodo bloqueado se puede restaurar inmediatamente mientras SDK se actualiza en línea en segundo plano. Una política flotante o solo en línea necesita una respuesta exitosa del servidor. Nunca trate un error en segundo plano registrado como un permiso para omitir una verificación de función fallida.

5. Verificar operaciones permitidas y denegadas

  1. Ejecute una vez con la clave de prueba y confirme que existe el informe.
  2. Elimine LICENTIVO_LICENSE_KEY y ejecútelo nuevamente con el mismo usuario: las credenciales guardadas deberían restaurarse.
  3. Cambiar la exportación a una característica ausente de la licencia: la operación debe devolver un error sin escribir un informe.
  4. Marque un reinicio sin conexión solo cuando la política lo permita y el contrato de arrendamiento firmado aún sea válido.

Problemas comunes de integración

Comprueba el ID del producto, todos los pares ID de clave/clave pública y la licencia del cliente. Las claves públicas pertenecen al producto; las licencias y credenciales de dispositivo son independientes. No distribuyas claves de prueba ni API Keys de gestión.

Una función denegada requiere verificar el nombre de la función y la política de licencia; RunFeature comprueba los derechos, no el uso restante. Utilice RunMeteredFeature para un contador.

Los límites del dispositivo, una licencia vencida o una denegación explícita del servidor requieren que el cliente o proveedor resuelva la autorización. Muestre el error y solicite el ID cuando esté disponible. Nunca incluya claves de gestión de proveedores en la aplicación.