1. ایک آف لائن پالیسی منتخب کریں۔
نیٹ ورک سے الگ کمپیوٹر پر C++ سافٹ ویئر کے لیے آلے سے منسلک فعالیت کی درخواست برآمد کریں، انٹرنیٹ سے منسلک کمپیوٹر پر اسے منظور کریں اور دستخط شدہ جواب اصل کمپیوٹر پر درآمد کریں۔ فائلوں کے اس تبادلے کے لیے آلے سے منسلک لائسنس اور آف لائن فعالیت کی اجازت دینے والی پالیسی درکار ہے۔ فلوٹنگ لائسنس کے لیے اب بھی آن لائن سیشن ضروری ہے۔
آلات کا کوٹا موجودہ فعال رجسٹریشن کے مطابق گنا جاتا ہے اور آزاد کرنے پر واپس ملتا ہے۔ عام لائسنس آف لائن بھی شمار ہوتے ہیں؛ فلوٹنگ لائسنس کی لیز ختم ہونے پر بھی کوٹا خود واپس ملتا ہے۔
- کنسول > مصنوعات سے پروڈکٹ 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 ڈویلپمنٹ پیکیج انسٹال کریں۔
& ([scriptblock]::Create((Invoke-WebRequest 'https://www.licentivo.com/assets/sdk/releases/v0.11.6/install.ps1').Content)) -Language cpp -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 -- cppcmake_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)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.' }set -e
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="SDK_PREFIX"
cmake --build build --target offline3. SDK کا استعمال کرتے ہوئے برآمد اور درآمد کریں
مثال کو offline.cpp کے بطور محفوظ کریں اور اسے اپنے SDK- فعال CMake پروجیکٹ میں شامل کریں۔ آف لائن کمپیوٹر پر آف لائن درخواست YOUR_LICENSE_KEY چلائیں۔ یہ آن لائن کلائنٹ کو کھولے بغیر activation.request.json پیدا کرتا ہے۔
اس درخواست کو منسلک کمپیوٹر پر منتقل کریں۔ وینڈر کنسول یا متعلقہ کسٹمر کے پورٹل میں، درخواست کو اپ لوڈ کریں اور اس کا منظور شدہ جواب ڈاؤن لوڈ کریں۔ اسے ایکٹیویشن کے طور پر محفوظ کریں۔ response.json، پھر دونوں فائلیں اصل کمپیوٹر پر واپس کریں اور آف لائن امپورٹ YOUR_LICENSE_KEY چلائیں۔
#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;
}
}./build/Release/offline.exe request YOUR_LICENSE_KEY./build/Release/offline.exe import YOUR_LICENSE_KEY./build/offline request YOUR_LICENSE_KEY./build/offline import YOUR_LICENSE_KEY4. نتیجہ چیک کریں۔
- تصدیق کریں کہ درآمد کامیاب ہے اور licensed-report.txt بن گیا ہے۔
- ذخیرہ شدہ ڈیوائس کی اسناد اور اسی کیش لوکیشن کا استعمال کرتے ہوئے دوبارہ شروع کریں۔ ایک اب بھی درست آف لائن لیز کو حقدار خصوصیت کی اجازت دینی چاہیے۔
- دوسرے عام کمپیوٹر پر درآمد کرنے کی کوشش کریں: ڈیوائس کی توثیق کو اس جواب کو مسترد کر دینا چاہیے۔
- اجازت کی میعاد ختم ہونے اور آف لائن مدت کو چیک کریں۔ فائل کی درآمد اصل لائسنس یا اجازت نامے کے استعمال کو اپنی دستخط شدہ حدود سے آگے نہیں بڑھاتی ہے۔
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 پے لوڈز میں ترمیم نہ کریں یا تصدیق کو غیر فعال کریں۔
ایک میعاد ختم ہونے والی درخواست کو ایک نئی درخواست اور منظوری کی ضرورت ہے۔ پالیسی کے مطابق میعاد ختم ہونے والی لیز کی تجدید یا کسی اور منظور شدہ فائل کے تبادلے کی ضرورت ہوتی ہے۔ آن لائن میٹرڈ ریزرو/کمٹ آپریشن مکمل آف لائن ہونے کے دوران دستیاب نہیں ہیں۔
پرانے آلے کے اگلے آن لائن چیک پر ریموٹ ان بائنڈ یا تنسیخ معلوم ہو جاتا ہے۔ ایک مستقل طور پر آف لائن آلہ فوری طور پر سرور سائیڈ تبدیلی نہیں سیکھ سکتا۔ اس حد کو ذہن میں رکھتے ہوئے آف لائن دورانیہ کا انتخاب کریں۔