Ir al contenido
LICENTIVO / INTEGRATION

Licencias de software en Rust: activación y control de funciones

Agregue la caja Rust a una aplicación Cargo y proteja una exportación real mediante una devolución de llamada escrita. El núcleo nativo incluido gestiona autorizaciones, credenciales almacenadas en caché, latidos y asientos flotantes.

Rust 1.77+Actualizado

1. Prepare el producto y la licencia.

Comience con una licencia de nodo bloqueado y una función de exportación normal. Agregue el uso medido solo después de que funcione el flujo de autorización básico.

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. En Integración rápida, cree o seleccione un producto. Habilite una función denominada exportación en su política y prepare una licencia de prueba.

2. Instale el SDK

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.

Los errores de compilación nativos generalmente indican que faltan encabezados C11 o libcurl, arquitecturas que no coinciden o el destino de Windows incorrecto. El núcleo nativo actual de Windows requiere GNU/MinGW; MSVC pendiente de aceptación.

Terminal · new Cargo application
cargo new licensed_app
cd licensed_app
cargo add licentivo@=0.11.6
Ubuntu / Debian · native dependencies
sudo apt-get update
sudo apt-get install build-essential libcurl4-openssl-dev libssl-dev pkg-config
Windows x64 · PowerShell · GNU/MinGW
rustup toolchain install stable-x86_64-pc-windows-gnu --profile minimal
$env:LICENTIVO_CURL_ROOT = "C:/path/to/curl-mingw"
$env:PATH = "$env:LICENTIVO_CURL_ROOT/bin;$env:PATH"
cargo +stable-x86_64-pc-windows-gnu build

3. Proteger una exportación real

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 run_feature en la operación real y sustituye la exportación por tu propia función.

Rust 1.77+ · src/main.rs
use licentivo::{Client, Error};
use std::{env, fs};

// BEGIN LICENTIVO PRODUCT
// Copy Product ID and all key ID/public key pairs from Console > Products > Signing public keys.
const PRODUCT_ID: &str = "YOUR_PRODUCT_ID";
const TRUSTED_KEYS_JSON: &str = r#"{"YOUR_KEY_ID":"YOUR_PUBLIC_KEY"}"#;
// END LICENTIVO PRODUCT

fn setting(name: &str, fallback: &str) -> String {
    env::var(name).ok().filter(|value| !value.is_empty()).unwrap_or_else(|| fallback.into())
}

fn export_report(path: &str) -> Result<(), Error> {
    // Replace this write with your existing export operation.
    fs::write(path, "A report generated by the licensed application.\n")?;
    Ok(())
}

fn run() -> Result<(), Error> {
    // A GUI supplies the activation input. Later starts use an empty key.
    let mut client = Client::open_product(
        PRODUCT_ID, TRUSTED_KEYS_JSON,
        &setting("LICENTIVO_LICENSE_KEY", ""),
    )?;
    let feature = setting("LICENTIVO_FEATURE", "export");
    let path = setting("LICENTIVO_OUTPUT", "licensed-report.txt");
    if setting("LICENTIVO_METERED", "0") == "1" {
        client.run_metered_feature(&feature, 1, &setting("LICENTIVO_OPERATION_ID", ""), || export_report(&path))?;
    } else {
        client.run_feature(&feature, || export_report(&path))?;
    }
    println!("License OK: {feature} is available\nExport completed: {path}");
    // Real app: keep client alive until shutdown. Drop returns floating seats;
    // do not deactivate a device on a normal application exit.
    Ok(())
}

fn main() {
    if let Err(error) = run() { eprintln!("{error}"); std::process::exit(2); }
}

4. Mantener vivo al cliente hasta el cierre.

Este ejemplo de línea de comandos realiza una operación y sale. En una aplicación de escritorio, abra un cliente al inicio, invoque la devolución de llamada de la función desde la acción de exportación y cierre el cliente solo cuando se cierre la aplicación.

Después de la activación, los inicios posteriores pueden dejar LICENTIVO_LICENSE_KEY vacío y restaurar la credencial privada con el mismo usuario y ubicación de caché. Mantenga esa credencial en el directorio de datos de la aplicación del usuario. El cierre detiene los heartbeats y devuelve los asientos flotantes; La salida normal no debe desactivar un dispositivo con nodo bloqueado.

El acceso sin conexión está disponible solo cuando la política lo permite y la concesión firmada sigue siendo válida. Una función caducada o denegada debe permanecer bloqueada. Las operaciones medidas requieren una conexión de red.

Mantenga el Cliente mutable en el estado de aplicación propietaria. Es Enviar pero no Sincronizar: muévalo a un trabajador en lugar de compartir llamadas simultáneas. Drop detiene el trabajo en segundo plano y devuelve asientos flotantes. Close consume al cliente; La salida normal conserva el enlace del dispositivo.

5. Ejecute y verifique el resultado.

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.

  1. Confirme que una licencia válida con acceso de exportación crea licensed-report.txt.
  2. Borre LICENTIVO_LICENSE_KEY y vuelva a ejecutarlo con la misma cuenta de usuario: la credencial guardada debería restaurarse.
  3. Establezca LICENTIVO_FEATURE en una característica ausente de la licencia y LICENTIVO_OUTPUT en un nombre de archivo nuevo. El programa debe informar una denegación sin crear ese archivo.
  4. Pruebe un reinicio sin conexión solo con una concesión firmada permitida y vigente. No omita una verificación de función fallida después de un error de actualización en segundo plano.
Windows · PowerShell
$env:LICENTIVO_LICENSE_KEY = 'YOUR_LICENSE_KEY'
cargo +stable-x86_64-pc-windows-gnu run
Linux · Bash
LICENTIVO_LICENSE_KEY=YOUR_LICENSE_KEY cargo run

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.

Función denegada, límite de dispositivo alcanzado o licencia vencida: inspeccione la licencia y la política en la consola, luego muestre el error SDK al cliente. Una autorización fallida no debe llamar a la función de exportación.

run_feature comprueba el acceso a las funciones; la variante medida reserva y liquida el uso configurado. Utilice una identificación de operación estable para cada trabajo comercial real e inspeccione su resultado duradero antes de recuperar un trabajo interrumpido.

Los errores de compilación nativos generalmente indican que faltan encabezados C11 o libcurl, arquitecturas que no coinciden o el destino de Windows incorrecto. El núcleo nativo actual de Windows requiere GNU/MinGW; MSVC pendiente de aceptación.