1. Preparare un prodotto e una licenza
Utilizza questo percorso per un'utilità desktop, un'applicazione della riga di comando o un servizio che necessita di una licenza con nodo bloccato. Inizia con una funzionalità di esportazione illimitata in modo da poter verificare la licenza prima di aggiungere contatori di utilizzo.
La quota conta le attivazioni correnti e viene restituita al rilascio. Le licenze ordinarie contano anche offline; quelle flottanti restituiscono la quota anche alla scadenza del lease.
- Copia l’ID prodotto da Console > Prodotti. Apri le chiavi pubbliche di firma dello stesso prodotto e inserisci tutte le coppie ID chiave/chiave pubblica nel codice di inizializzazione, sostituendo YOUR_PRODUCT_ID, YOUR_KEY_ID e YOUR_PUBLIC_KEY. L’integrazione rapida può generare il codice. Non serve un file di configurazione; l’SDK usa https://www.licentivo.com per impostazione predefinita.
- Installa Go 1.26 o versione successiva. Nella console, apri Integrazione rapida e crea un prodotto.
- Abilita una funzionalità denominata esportazione nella politica di autorizzazione del prodotto. Crea o seleziona una licenza di prova.
2. Installa SDK nel tuo progetto
Installa SDK 0.11.6 eseguendo il comando seguente nel tuo progetto o aggiungendo la dipendenza di compilazione. Il gestore di pacchetti scarica SDK; non servono archivi sorgente, estrazione manuale o percorsi locali.
go get github.com/spf86/licentivo-sdk@v0.11.63. Proteggi un'operazione
Inizializza l’SDK all’avvio o nel gestore di attivazione della tua applicazione. Leggi la chiave cliente dal modulo e passa ID prodotto e chiavi attendibili. Mantieni il client fino alla chiusura. Inserisci RunFeature nell’operazione reale e sostituisci l’esportazione con la tua funzione.
// 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. Conservare un client per tutta la durata dell'applicazione
In un'applicazione reale, apri il client all'avvio e inserisci RunFeature nel pulsante di esportazione o nel gestore dei comandi. Mantieni il client in vita fino allo spegnimento. La chiusura interrompe il lavoro in background; preserva la normale registrazione con nodo bloccato.
SDK memorizza una credenziale associata al computer dopo l'attivazione. Gli avvii successivi possono passare una chiave vuota e ripristinarla dallo stesso account utente e posizione della cache. Non è necessario memorizzare gli ID di attivazione o inviare personalmente HTTP heartbeat.
Un lease offline valido con nodo bloccato può essere ripristinato immediatamente mentre SDK si aggiorna online in background. Una policy mobile o solo online necessita di una risposta corretta del server. Non considerare mai un errore in background registrato come un'autorizzazione per ignorare un controllo di funzionalità non riuscito.
5. Verificare le operazioni consentite e negate
- Eseguire una volta con la chiave di prova e verificare che il rapporto esista.
- Rimuovi LICENTIVO_LICENSE_KEY ed esegui nuovamente con lo stesso utente: le credenziali salvate dovrebbero essere ripristinate.
- Modifica esportazione in una funzionalità assente dalla licenza: l'operazione deve restituire un errore senza scrivere un report.
- Controlla un riavvio offline solo quando la policy lo consente e il lease firmato è ancora valido.
Problemi comuni di integrazione
Controlla ID prodotto, tutte le coppie ID chiave/chiave pubblica e la licenza del cliente. Le chiavi pubbliche appartengono al prodotto; licenze e credenziali dei dispositivi sono separate. Non distribuire chiavi di test o API Key di gestione.
Una funzionalità negata richiede il controllo del nome della funzionalità e della politica di licenza; RunFeature verifica il diritto, non l'utilizzo rimanente. Utilizza RunMeteredFeature per un contatore.
I limiti del dispositivo, una licenza scaduta o un rifiuto esplicito del server richiedono che il cliente o il fornitore risolvano l'autorizzazione. Mostra l'errore e l'ID della richiesta, ove disponibile. Non includere mai le chiavi di gestione del fornitore nell'applicazione.