মূল লেখায় যান
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 প্রকল্পে যুক্ত করুন। অফলাইন কম্পিউটারে অফলাইন অনুরোধ YOUR_LICENSE_KEY চালান। এটি একটি অনলাইন ক্লায়েন্ট না খুলেই অ্যাক্টিভেশন তৈরি করে।request.json।

অনুরোধটি একটি সংযুক্ত কম্পিউটারে সরান। বিক্রেতা কনসোল বা সংশ্লিষ্ট গ্রাহকের পোর্টালে, অনুরোধটি আপলোড করুন এবং এর অনুমোদিত প্রতিক্রিয়া ডাউনলোড করুন। এটিকে অ্যাক্টিভেশন হিসাবে সংরক্ষণ করুন। response.json, তারপরে দুটি ফাইলই আসল কম্পিউটারে ফিরিয়ে দিন এবং অফলাইন ইম্পোর্ট 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 পেলোড সম্পাদনা করবেন না বা যাচাইকরণ অক্ষম করবেন না।

একটি মেয়াদ উত্তীর্ণ অনুরোধ একটি নতুন অনুরোধ এবং অনুমোদন প্রয়োজন. একটি মেয়াদোত্তীর্ণ ইজারা পুনর্নবীকরণ বা নীতি অনুযায়ী অন্য অনুমোদিত ফাইল বিনিময় প্রয়োজন. সম্পূর্ণ অফলাইনে থাকাকালীন অনলাইন মিটারড রিজার্ভ/কমিট অপারেশন অনুপলব্ধ।

একটি দূরবর্তী আবদ্ধ বা প্রত্যাহার পুরানো ডিভাইসের পরবর্তী অনলাইন চেক এ পরিচিত হয়. একটি স্থায়ীভাবে অফলাইন ডিভাইস অবিলম্বে সার্ভার-সাইড পরিবর্তন শিখতে পারে না। সেই সীমাবদ্ধতার কথা মাথায় রেখে অফলাইন সময়কাল বেছে নিন।