1. Bereiten Sie ein Produkt und eine Lizenz vor
Dieser Ablauf eignet sich für Desktopprogramme, Kommandozeilenanwendungen und Dienste mit gerätegebundener Lizenz. Beginnen Sie mit einer Exportfunktion ohne Nutzungszähler und prüfen Sie die Lizenzierung, bevor Sie Zähler ergänzen.
Das Gerätekontingent zählt aktuelle Aktivierungen und wird bei Freigabe wieder verfügbar. Normale Lizenzen zählen auch offline; bei Floating-Lizenzen gibt auch ein abgelaufener Lease das Kontingent frei.
- Kopieren Sie die Produkt-ID unter Konsole > Produkte. Öffnen Sie die Signaturprüfschlüssel dieses Produkts und tragen Sie alle Schlüssel-ID/Public-Key-Paare im Initialisierungscode ein. Ersetzen Sie YOUR_PRODUCT_ID, YOUR_KEY_ID und YOUR_PUBLIC_KEY. Die Schnellintegration kann den Code erzeugen. Eine Produktkonfigurationsdatei ist nicht erforderlich; das SDK verwendet standardmäßig https://www.licentivo.com.
- Installieren Sie Go 1.26 oder höher. Öffnen Sie in der Konsole die Schnellintegration und erstellen Sie ein Produkt.
- Aktivieren Sie eine Funktion namens „Export“ in der Autorisierungsrichtlinie des Produkts. Erstellen oder wählen Sie eine Testlizenz aus.
2. Installieren Sie SDK in Ihrem Projekt
Installieren Sie SDK 0.11.6 mit dem folgenden Befehl in Ihrem Anwendungsprojekt oder fügen Sie die Build-Abhängigkeit hinzu. Der Paketmanager lädt das SDK; ein Quellcode-ZIP, manuelles Entpacken oder ein lokaler Quellcodepfad ist nicht erforderlich.
go get github.com/spf86/licentivo-sdk@v0.11.63. Schützen Sie einen Vorgang
Initialisieren Sie das SDK beim Start oder bei der Aktivierung Ihrer Software. Lesen Sie den Kundenschlüssel aus Ihrem Aktivierungsdialog und übergeben Sie Produkt-ID und vertrauenswürdige Schlüssel. Halten Sie den Client bis zum Beenden offen. Platzieren Sie RunFeature am tatsächlichen Geschäftsaufruf und ersetzen Sie den Export durch Ihre eigene Funktion.
// 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. Behalten Sie einen Client für die gesamte Anwendungslebensdauer
Öffnen Sie in einer echten Anwendung den Client beim Start und platzieren Sie RunFeature in der Exportschaltfläche oder dem Befehlshandler. Halten Sie den Client bis zum Herunterfahren am Leben. Schließen stoppt die Hintergrundarbeit; Es behält die normale knotengebundene Registrierung bei.
Das SDK speichert nach der Aktivierung einen maschinengebundenen Berechtigungsnachweis. Spätere Starts können einen leeren Schlüssel übergeben und ihn über dasselbe Benutzerkonto und denselben Cache-Speicherort wiederherstellen. Sie müssen selbst keine Aktivierungs-IDs speichern oder HTTP-Heartbeats senden.
Eine gültige knotengesperrte Offline-Lease kann sofort wiederhergestellt werden, während SDK online im Hintergrund aktualisiert wird. Eine Floating- oder Nur-Online-Richtlinie erfordert eine erfolgreiche Serverantwort. Behandeln Sie einen protokollierten Hintergrundfehler niemals als Erlaubnis, eine fehlgeschlagene Funktionsprüfung zu umgehen.
5. Überprüfen Sie erlaubte und verweigerte Vorgänge
- Führen Sie den Test einmal mit dem Testschlüssel aus und bestätigen Sie, dass der Bericht vorhanden ist.
- Entfernen Sie LICENTIVO_LICENSE_KEY und führen Sie es erneut unter demselben Benutzer aus: Die gespeicherten Anmeldeinformationen sollten wiederhergestellt werden.
- Export in eine Funktion ändern, die nicht in der Lizenz enthalten ist: Der Vorgang muss einen Fehler zurückgeben, ohne einen Bericht zu schreiben.
- Überprüfen Sie einen Offline-Neustart nur, wenn die Richtlinie dies zulässt und der unterzeichnete Lease noch gültig ist.
Häufige Integrationsprobleme
Prüfen Sie Produkt-ID, alle Schlüssel-ID/Public-Key-Paare und den eingegebenen Lizenzschlüssel. Öffentliche Prüfschlüssel gehören zum Produkt; Kundenlizenzen und Geräteanmeldedaten sind getrennt. Verteilen Sie keine Testschlüssel oder Verwaltungs-API-Keys.
Bei einer verweigerten Funktion müssen der Funktionsname und die Lizenzrichtlinie überprüft werden. RunFeature prüft die Berechtigung, nicht die verbleibende Nutzung. Verwenden Sie RunMeteredFeature für einen Zähler.
Gerätebeschränkungen, eine abgelaufene Lizenz oder eine explizite Serververweigerung erfordern, dass der Kunde oder Anbieter die Autorisierung auflöst. Zeigen Sie die Fehler- und Anforderungs-ID an, sofern verfügbar. Fügen Sie niemals Lieferantenverwaltungsschlüssel in die Anwendung ein.