मुख्य सामग्री पर जाएँ
LICENTIVO / INTEGRATION

C++ ऑफलाइन लाइसेंस सक्रियण

डिवाइस से बँधी अनुरोध और उत्तर फ़ाइलों से C++ ऐप सक्रिय करें। CMake उदाहरण में हस्ताक्षर, डिवाइस बाइंडिंग और ऑफलाइन वैधता की जाँच करें।

ऑफ़लाइन कार्यप्रवाह · C++17अपडेट

1. ऑफ़लाइन नीति चुनें

नेटवर्क से अलग कंप्यूटर पर C++ सॉफ़्टवेयर के लिए डिवाइस से बँधा सक्रियण अनुरोध एक्सपोर्ट करें, उसे इंटरनेट वाले कंप्यूटर से स्वीकृत करें और हस्ताक्षरित उत्तर मूल कंप्यूटर पर इम्पोर्ट करें। इस फ़ाइल आदान-प्रदान के लिए डिवाइस से बँधा लाइसेंस और ऑफलाइन सक्रियण की अनुमति देने वाली नीति चाहिए। फ़्लोटिंग लाइसेंस के लिए ऑनलाइन सत्र अब भी आवश्यक है।

डिवाइस कोटा वर्तमान सक्रियणों से गिना जाता है और रिलीज़ पर लौटता है। सामान्य लाइसेंस ऑफ़लाइन भी गिने जाते हैं; फ्लोटिंग लाइसेंस की लीज़ समाप्त होने पर भी कोटा अपने आप लौटता है।

  1. कंसोल > उत्पाद से उत्पाद ID कॉपी करें। उसी उत्पाद की हस्ताक्षर सार्वजनिक कुंजियाँ खोलें और हर कुंजी ID/सार्वजनिक कुंजी जोड़ी को आरंभिक कोड में डालें; YOUR_PRODUCT_ID, YOUR_KEY_ID और YOUR_PUBLIC_KEY बदलें। त्वरित एकीकरण यह कोड भी बना सकता है। उत्पाद कॉन्फ़िगरेशन फ़ाइल नहीं चाहिए; SDK डिफ़ॉल्ट रूप से https://www.licentivo.com से जुड़ता है।

2. नेटिव SDK स्थापित करें

पहले CMake 3.18 या नया संस्करण इंस्टॉल करें। Windows x64 पर Visual Studio 2022 C++ Build Tools और मेल खाता MSVC SDK पैकेज उपयोग करें, साथ में -G "Visual Studio 17 2022" -A x64 दें। Linux x64 पर C11/C++17 कंपाइलर चाहिए। SDK_PREFIX को इंस्टॉलर द्वारा दिखाए गए CMake प्रीफ़िक्स पथ से बदलें। उदाहरण को offline.cpp के रूप में और नीचे दी गई CMakeLists.txt को उसी डायरेक्टरी में सहेजें। इंटरनेट वाले कंप्यूटर पर इंस्टॉलेशन और कंपाइलेशन पूरा करें, फिर निष्पादन योग्य फ़ाइल और उसकी रनटाइम निर्भरताएँ ऑफलाइन कंप्यूटर पर कॉपी करें।

अपने कंपाइलर और आर्किटेक्चर से मेल खाने वाला साझा libcurl डेवलपमेंट पैकेज इंस्टॉल करें। Windows MSVC x64 पर CURL_DIR की जगह CURLConfig.cmake वाली डायरेक्टरी दें, स्थानीय परीक्षण के लिए curl की bin डायरेक्टरी को PATH में जोड़ें और ऐप के साथ आवश्यक DLL वितरित करें; Linux पर अपने वितरण का साझा libcurl डेवलपमेंट पैकेज इंस्टॉल करें।

Windows · PowerShell
& ([scriptblock]::Create((Invoke-WebRequest 'https://www.licentivo.com/assets/sdk/releases/v0.11.6/install.ps1').Content)) -Language cpp -Toolchain msvc
Linux · Bash
curl --fail --silent --show-error --location --proto '=https' --proto-redir '=https' 'https://www.licentivo.com/assets/sdk/releases/v0.11.6/install.sh' | bash -s -- cpp
CMake · CMakeLists.txt
cmake_minimum_required(VERSION 3.18)
project(offline_activation LANGUAGES C CXX)
find_package(Licentivo 0.11.6 REQUIRED)
add_executable(offline offline.cpp)
target_link_libraries(offline PRIVATE Licentivo::CPP)
set_target_properties(offline PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON)
Windows x64 · PowerShell · MSVC
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 offline
if ($LASTEXITCODE -ne 0) { throw 'Build failed.' }
Linux x64 · Bash
set -e
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="SDK_PREFIX"
cmake --build build --target offline

3. SDK से अनुरोध निर्यात और उत्तर आयात करें

उदाहरण को offline.cpp में सहेजकर SDK-सक्षम CMake प्रोजेक्ट में जोड़ें। ऑफ़लाइन कंप्यूटर पर offline request YOUR_LICENSE_KEY चलाएँ। ऑनलाइन क्लाइंट खोले बिना activation.request.json बनता है।

अनुरोध को इंटरनेट वाले कंप्यूटर पर ले जाएँ। विक्रेता कंसोल या संबंधित ग्राहक पोर्टल में अनुरोध अपलोड करके स्वीकृत उत्तर डाउनलोड करें। उसे activation.response.json नाम दें। दोनों फ़ाइलें मूल कंप्यूटर पर वापस लाकर offline import YOUR_LICENSE_KEY चलाएँ।

C++17 · offline.cpp
#include "licentivo.hpp"
#include <fstream>
#include <iostream>
#include <iterator>
#include <stdexcept>
#include <string>

// BEGIN LICENTIVO PRODUCT
// Copy Product ID and all key ID/public key pairs from Console > Products > Signing public keys.
static const std::string PRODUCT_ID = "YOUR_PRODUCT_ID";
static const std::string TRUSTED_KEYS_JSON = R"({"YOUR_KEY_ID":"YOUR_PUBLIC_KEY"})";
// END LICENTIVO PRODUCT

std::string readText(const char* path) {
    std::ifstream file(path);
    if (!file) throw std::runtime_error("Cannot read file");
    return {std::istreambuf_iterator<char>(file), {}};
}

int main(int argc, char** argv) {
    try {
        // Product settings are in code; the key is entered by the customer.
        if (argc < 3) throw std::runtime_error("Usage: offline request|import LICENSE_KEY");
        auto client = licentivo::Client::ForProduct(PRODUCT_ID, TRUSTED_KEYS_JSON, argv[2]);
        if (std::string(argv[1]) == "request") {
            std::ofstream file("activation.request.json");
            file << client.OfflineRequest();
            if (!file) throw std::runtime_error("Cannot save request");
            std::cout << "Created activation.request.json\n";
        } else if (std::string(argv[1]) == "import") {
            client.ImportOffline(readText("activation.request.json"),
                                 readText("activation.response.json"));
            client.RunFeature("export", [] {
                std::ofstream file("licensed-report.txt");
                file << "Licensed offline export\n";
                if (!file) throw std::runtime_error("Cannot save report");
            });
            std::cout << "Created licensed-report.txt\n";
        } else {
            throw std::runtime_error("Unknown operation");
        }
    } catch (const std::exception& error) {
        std::cerr << error.what() << '\n';
        return 1;
    }
}
Windows · export request
./build/Release/offline.exe request YOUR_LICENSE_KEY
Windows · import approved response
./build/Release/offline.exe import YOUR_LICENSE_KEY
Linux · export request
./build/offline request YOUR_LICENSE_KEY
Linux · import approved response
./build/offline import YOUR_LICENSE_KEY

4. परिणाम जाँचें

  1. पुष्टि करें कि आयात सफल है और licensed-report.txt बनती है।
  2. उसी कैश स्थान और सहेजे गए डिवाइस क्रेडेंशियल से पुनः शुरू करें। अभी मान्य ऑफ़लाइन अनुमति से अधिकृत फ़ीचर चलना चाहिए।
  3. किसी दूसरे सामान्य कंप्यूटर पर वही उत्तर आयात करके देखें; डिवाइस सत्यापन उसे अस्वीकार करना चाहिए।
  4. लाइसेंस की समाप्ति और ऑफ़लाइन अवधि जाँचें। फ़ाइल आयात मूल अवधि नहीं बढ़ाता और हस्ताक्षरित सीमा के आगे उपयोग की अनुमति नहीं देता।

C इंटरफ़ेस का उपयोग

C में उत्पाद ID, विश्वसनीय सार्वजनिक कुंजियाँ और ग्राहक की लाइसेंस कुंजी देकर ln_init_product से ऐसा क्लाइंट बनाएँ जो अभी शुरू न हुआ हो। ln_offline_request से अनुरोध बनाएँ, फिर ln_import_offline से अनुरोध और उत्तर सत्यापित करके इम्पोर्ट करें। लौटाई गई स्ट्रिंग को ln_free_string और क्लाइंट को ln_destroy से मुक्त करें।

पहले पूरी तरह ऑफलाइन सक्रियण के लिए ln_start या ln_open न बुलाएँ: ये ऑनलाइन शुरू होने का प्रयास करते हैं। ऊपर दी गई अनुरोध और इम्पोर्ट प्रक्रिया अपनाएँ और SDK को हस्ताक्षरित उत्तर सत्यापित करने दें; व्यावसायिक कोड में हस्ताक्षर स्वयं पार्स न करें।

सामान्य विफलताएँ और सीमाएँ

उत्पाद ID, हर कुंजी ID/सार्वजनिक कुंजी जोड़ी और ग्राहक लाइसेंस जाँचें। सार्वजनिक कुंजियाँ उत्पाद की हैं; लाइसेंस और डिवाइस प्रमाण अलग हैं। परीक्षण कुंजियाँ या प्रबंधन API Key वितरित न करें।

अमान्य उत्तर का कारण मूल अनुरोध, उत्पाद, डिवाइस, हस्ताक्षर कुंजी या ऐप संस्करण का मेल न खाना हो सकता है। उत्तर उसी कंप्यूटर पर वापस लाएँ जिसने अनुरोध बनाया था। JSON पेलोड न बदलें और सत्यापन बंद न करें।

अनुरोध की अवधि समाप्त होने पर नया अनुरोध और मंज़ूरी चाहिए। हस्ताक्षरित अनुमति समाप्त होने पर नीति के अनुसार नवीनीकरण या नया फ़ाइल आदान-प्रदान करें। पूर्णतः ऑफ़लाइन रहते हुए ऑनलाइन reserve/commit वाले गणना ऑपरेशन उपलब्ध नहीं होते।

दूर से किए गए अनबाइंड या निरस्तीकरण का पता पुराने डिवाइस को अगली ऑनलाइन जाँच पर चलता है। हमेशा ऑफ़लाइन डिवाइस सर्वर का बदलाव तुरंत नहीं जान सकता। ऑफ़लाइन अवधि चुनते समय इस सीमा को ध्यान में रखें।