1. Bereiten Sie das Produkt und die Lizenz vor
In einer nativen C11-Anwendung aktiviert das C-SDK die Kundenlizenz und prüft den Funktionszugriff, bevor es den Callback für die eigentliche Aktion aufruft. Beginnen Sie mit einer gerätegebundenen Lizenz und einem Export ohne Verbrauchszähler. Ergänzen Sie Nutzungszähler, sobald der grundlegende Ablauf funktioniert.
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.
- Erstellen Sie in der Schnellintegration ein Produkt oder wählen Sie es aus. Aktivieren Sie eine Funktion mit dem Namen „Export“ in ihrer Richtlinie und bereiten Sie eine Testlizenz vor.
2. Installieren Sie das SDK
Installieren Sie CMake 3.18 oder neuer. Verwenden Sie unter Windows x64 die Visual Studio 2022 C++ Build Tools und das passende MSVC-SDK-Paket mit -G "Visual Studio 17 2022" -A x64. Unter Linux x64 benötigen Sie C11-/C++17-Compiler. Ersetzen Sie SDK_PREFIX durch den vom Installationsprogramm ausgegebenen CMake-Präfix. Speichern Sie das Beispiel als app.c und die folgende CMakeLists.txt im selben Verzeichnis.
Installieren Sie ein Entwicklungspaket für die gemeinsam genutzte libcurl-Bibliothek passend zu Compiler und Architektur. Ersetzen Sie unter Windows mit MSVC x64 CURL_DIR durch das Verzeichnis mit CURLConfig.cmake, nehmen Sie das bin-Verzeichnis von curl für lokale Tests in PATH auf und liefern Sie benötigte DLLs mit; installieren Sie unter Linux das entsprechende libcurl-Entwicklungspaket Ihrer Distribution.
& ([scriptblock]::Create((Invoke-WebRequest 'https://www.licentivo.com/assets/sdk/releases/v0.11.6/install.ps1').Content)) -Language c -Toolchain msvccurl --fail --silent --show-error --location --proto '=https' --proto-redir '=https' 'https://www.licentivo.com/assets/sdk/releases/v0.11.6/install.sh' | bash -s -- ccmake_minimum_required(VERSION 3.18)
project(licensed_app LANGUAGES C)
find_package(Licentivo 0.11.6 REQUIRED)
add_executable(licensed_app app.c)
target_link_libraries(licensed_app PRIVATE Licentivo::C)
set_target_properties(licensed_app PROPERTIES C_STANDARD 11 C_STANDARD_REQUIRED ON)cmake -S . -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_PREFIX_PATH="SDK_PREFIX" -DCURL_DIR="CURL_DIR"
if ($LASTEXITCODE -ne 0) { throw 'CMake configure failed. Check the SDK prefix and matching libcurl development package.' }
cmake --build build --config Release --target licensed_app
if ($LASTEXITCODE -ne 0) { throw 'Build failed.' }set -e
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="SDK_PREFIX"
cmake --build build --target licensed_app3. Schützen Sie einen echten Export
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 ln_run_feature am tatsächlichen Geschäftsaufruf und ersetzen Sie den Export durch Ihre eigene Funktion.
#include "licentivo.h"
#include <stdio.h>
#include <stdlib.h>
/* BEGIN LICENTIVO PRODUCT */
/* Copy Product ID and all key ID/public key pairs from Console > Products > Signing public keys. */
static const char *PRODUCT_ID = "YOUR_PRODUCT_ID";
static const char *TRUSTED_KEYS_JSON = "{\"YOUR_KEY_ID\":\"YOUR_PUBLIC_KEY\"}";
/* END LICENTIVO PRODUCT */
static const char *setting(const char *name, const char *fallback) {
const char *value = getenv(name);
return value && value[0] ? value : fallback;
}
static int export_report(void *context) {
const char *path = (const char *)context;
/* Replace this write with your existing, non-metered export operation. */
FILE *file = fopen(path, "w");
if (!file) { perror("Export write failed"); return 0; }
int wrote = fputs("A report generated by the licensed application.\n", file) >= 0;
int closed = fclose(file) == 0;
return wrote && closed;
}
int main(void) {
/* Keep the handle to report startup errors. A GUI supplies the activation input. */
ln_client *client = ln_init_product(PRODUCT_ID, TRUSTED_KEYS_JSON, setting("LICENTIVO_LICENSE_KEY", ""));
if (!client) {
fputs("Startup failed: check the product ID and public keys and supply a license key for first activation.\n", stderr);
return 2;
}
if (!ln_start(client)) {
fprintf(stderr, "Startup failed: %s\n", ln_last_error(client));
ln_destroy(client);
return 2;
}
const char *feature = setting("LICENTIVO_FEATURE", "export");
const char *path = setting("LICENTIVO_OUTPUT", "licensed-report.txt");
int ok = setting("LICENTIVO_METERED", "")[0] == '1'
? ln_run_metered_feature(client, feature, 1, setting("LICENTIVO_OPERATION_ID", ""), export_report, (void *)path)
: ln_run_feature(client, feature, export_report, (void *)path);
if (!ok) {
char *status = ln_feature_status(client, feature);
fprintf(stderr, "Export denied or failed: %s; %s\n", status ? status : "status unavailable", ln_last_error(client));
ln_free_string(status);
}
if (ok) printf("License OK: %s is available\nExport completed: %s\n", feature, path);
ln_destroy(client); /* Real app: destroy on shutdown; no Deactivate on normal exit. */
return ok ? 0 : 2;
}
4. Halten Sie den Client bis zum Herunterfahren am Leben
In diesem Befehlszeilenbeispiel wird ein Vorgang ausgeführt und beendet. Öffnen Sie in einer Desktop-Anwendung einen Client beim Start, rufen Sie den Funktionsrückruf aus der Exportaktion auf und schließen Sie den Client nur, wenn die Anwendung beendet wird.
Nach der Aktivierung kann LICENTIVO_LICENSE_KEY bei späteren Starts leer bleiben und die privaten Anmeldeinformationen unter demselben Benutzer und Cache-Speicherort wiederhergestellt werden. Bewahren Sie diese Anmeldeinformationen im Anwendungsdatenverzeichnis des Benutzers auf. Das Schließen stoppt den Heartbeat und gibt schwebende Sitze zurück; Der normale Ausgang sollte ein knotengesperrtes Gerät nicht deaktivieren.
Der Offline-Zugriff ist nur verfügbar, wenn die Richtlinie dies zulässt und die unterzeichnete Bewilligung gültig bleibt. Eine abgelaufene oder verweigerte Funktion muss blockiert bleiben. Für den gebührenpflichtigen Betrieb ist eine Netzwerkverbindung erforderlich.
Behalten Sie den Griff ln_client bis zum Herunterfahren. ln_start führt die Startautorisierung durch; Nur ln_run_feature oder die gemessene Variante können geschützte Arbeiten aufrufen. Der Callback gibt 1 bei Geschäftserfolg und 0 bei Misserfolg zurück. Geben Sie zugewiesene Statuszeichenfolgen mit ln_free_string frei und rufen Sie dann beim Herunterfahren ln_destroy auf.
5. Führen Sie den Vorgang aus und überprüfen Sie das Ergebnis
- Bestätigen Sie, dass eine gültige Lizenz mit Exportzugriff licensed-report.txt erstellt.
- Löschen Sie LICENTIVO_LICENSE_KEY und führen Sie es erneut mit demselben Benutzerkonto aus: Die gespeicherten Anmeldeinformationen sollten wiederhergestellt werden.
- Legen Sie LICENTIVO_FEATURE auf eine in der Lizenz fehlende Funktion und LICENTIVO_OUTPUT auf einen neuen Dateinamen fest. Das Programm muss eine Ablehnung melden, ohne diese Datei zu erstellen.
- Testen Sie einen Offline-Neustart nur mit einer zulässigen, nicht abgelaufenen signierten Berechtigung. Umgehen Sie nicht eine fehlgeschlagene Funktionsprüfung nach einem Fehler bei der Hintergrundaktualisierung.
$env:LICENTIVO_LICENSE_KEY = 'YOUR_TEST_LICENSE_KEY'
./build/Release/licensed_app.exe
Remove-Item Env:LICENTIVO_LICENSE_KEY
./build/Release/licensed_app.exeLICENTIVO_LICENSE_KEY=YOUR_TEST_LICENSE_KEY ./build/licensed_app
unset LICENTIVO_LICENSE_KEY
./build/licensed_appBegrenzen Sie Dateiexporte mit einem monatlichen Nutzungszähler
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.
Funktion verweigert, Gerätelimit erreicht oder Lizenz abgelaufen: Überprüfen Sie die Lizenz und Richtlinie in der Konsole und zeigen Sie dem Kunden dann den Fehler SDK an. Eine fehlgeschlagene Autorisierung darf die Exportfunktion nicht aufrufen.
RunFeature prüft den Funktionszugriff; Die getaktete Variante reserviert und rechnet die konfigurierte Nutzung ab. Verwenden Sie eine stabile Vorgangs-ID für jeden echten Geschäftsauftrag und überprüfen Sie deren dauerhaftes Ergebnis, bevor Sie einen unterbrochenen Auftrag wiederherstellen.
CMake kann Licentivo nicht finden: Ersetzen Sie SDK_PREFIX im Befehl configure durch das vom Installationsprogramm ausgegebene CMake-Präfix. Compiler, Architektur und libcurl müssen mit dem installierten nativen Paket übereinstimmen.