1. پروڈکٹ اور لائسنس تیار کریں۔
مقامی C11 ایپ میں صارف کا لائسنس فعال کرنے اور کام کا کال بیک چلانے سے پہلے فیچر کی اجازت جانچنے کے لیے C SDK استعمال کریں۔ پہلے آلے سے منسلک لائسنس اور استعمال گننے کے بغیر ایکسپورٹ سے آغاز کریں؛ بنیادی عمل چلنے کے بعد استعمال کے کاؤنٹر شامل کریں۔
آلات کا کوٹا موجودہ فعال رجسٹریشن کے مطابق گنا جاتا ہے اور آزاد کرنے پر واپس ملتا ہے۔ عام لائسنس آف لائن بھی شمار ہوتے ہیں؛ فلوٹنگ لائسنس کی لیز ختم ہونے پر بھی کوٹا خود واپس ملتا ہے۔
- کنسول > مصنوعات سے پروڈکٹ 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 پریفکس پاتھ لکھیں۔ مثال کو app.c کے نام سے اور نیچے دی گئی 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 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. حقیقی برآمد کی حفاظت کریں۔
اپنی ایپ کے آغاز یا فعالیت پر SDK شروع کریں۔ فعالیت فارم سے صارف کی کلید پڑھیں اور پروڈکٹ ID اور قابلِ اعتماد کلیدیں دیں۔ ایپ بند ہونے تک کلائنٹ قائم رکھیں۔ اصل کاروباری عمل کے دروازے پر ln_run_feature رکھیں اور نمونے کی برآمد کی جگہ اپنا فنکشن دیں۔
#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. بند ہونے تک کلائنٹ کو زندہ رکھیں
یہ کمانڈ لائن مثال ایک آپریشن کرتی ہے اور باہر نکلتی ہے۔ ایک ڈیسک ٹاپ ایپلی کیشن میں، ایک کلائنٹ کو اسٹارٹ اپ پر کھولیں، ایکسپورٹ ایکشن سے فیچر کال بیک کی درخواست کریں، اور کلائنٹ کو صرف اس وقت بند کریں جب ایپلی کیشن ختم ہو۔
ایکٹیویشن کے بعد، بعد میں شروع ہونے والے LICENTIVO_LICENSE_KEY کو خالی چھوڑ سکتے ہیں اور اسی صارف اور کیش لوکیشن کے تحت نجی اسناد کو بحال کر سکتے ہیں۔ اس سند کو صارف ایپلیکیشن ڈیٹا ڈائرکٹری میں رکھیں۔ بند ہونے سے دل کی دھڑکنیں رک جاتی ہیں اور تیرتی نشستیں واپس آتی ہیں۔ نارمل ایگزٹ نوڈ لاکڈ ڈیوائس کو غیر فعال نہیں کرنا چاہیے۔
آف لائن رسائی صرف اس صورت میں دستیاب ہے جب پالیسی اس کی اجازت دیتی ہے اور دستخط شدہ گرانٹ درست رہتی ہے۔ ایک میعاد ختم یا مسترد شدہ خصوصیت کو مسدود رہنا چاہیے۔ میٹرڈ آپریشنز کے لیے نیٹ ورک کنکشن کی ضرورت ہوتی ہے۔
ln_client ہینڈل کو بند ہونے تک رکھیں۔ ln_start سٹارٹ اپ کی اجازت دیتا ہے۔ صرف ln_run_feature یا میٹرڈ ویرینٹ محفوظ کام کی درخواست کر سکتا ہے۔ کال بیک کاروباری کامیابی پر 1 اور ناکامی پر 0 لوٹاتا ہے۔ ln_free_string کے ساتھ مختص اسٹیٹس سٹرنگز جاری کریں، پھر شٹ ڈاؤن پر ln_destroy پر کال کریں۔
5. چلائیں اور نتیجہ کی تصدیق کریں۔
- تصدیق کریں کہ برآمدی رسائی کے ساتھ ایک درست لائسنس licensed-report.txt بناتا ہے۔
- LICENTIVO_LICENSE_KEY کو صاف کریں اور اسی صارف اکاؤنٹ کا استعمال کرتے ہوئے دوبارہ چلائیں: محفوظ کردہ اسناد کو بحال ہونا چاہئے۔
- LICENTIVO_FEATURE کو لائسنس سے غائب ایک خصوصیت اور LICENTIVO_OUTPUT کو ایک تازہ فائل نام پر سیٹ کریں۔ پروگرام کو اس فائل کو بنائے بغیر انکار کی اطلاع دینی چاہیے۔
- صرف اجازت یافتہ، غیر ختم شدہ دستخط شدہ گرانٹ کے ساتھ آف لائن دوبارہ شروع کرنے کی جانچ کریں۔ بیک گراؤنڈ ریفریش کی خرابی کے بعد ناکام فیچر چیک کو نظرانداز نہ کریں۔
$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_appماہانہ استعمال کاؤنٹر کے ساتھ سافٹ ویئر کی برآمدات کو محدود کریں۔
عام انضمام کے مسائل
پروڈکٹ ID، ہر کلید ID/عوامی کلید کا جوڑا اور صارف کا لائسنس جانچیں۔ عوامی کلیدیں پروڈکٹ کی ہیں؛ لائسنس اور آلے کی اسناد الگ ہیں۔ آزمائشی کلیدیں یا انتظامی API Key تقسیم نہ کریں۔
خصوصیت سے انکار، ڈیوائس کی حد تک پہنچ گئی یا لائسنس کی میعاد ختم: کنسول میں لائسنس اور پالیسی کا معائنہ کریں، پھر گاہک کو SDK کی خرابی دکھائیں۔ ایک ناکام اجازت کو ایکسپورٹ فنکشن کو کال نہیں کرنا چاہیے۔
رن فیچر فیچر تک رسائی کی جانچ کرتا ہے۔ میٹرڈ ویرینٹ ریزرو کرتا ہے اور ترتیب شدہ استعمال کو حل کرتا ہے۔ حقیقی کاروباری جاب کے لیے ایک مستحکم آپریشن آئی ڈی استعمال کریں اور کسی رکاوٹ والی نوکری کو بحال کرنے سے پہلے اس کے پائیدار نتیجہ کا معائنہ کریں۔
CMake Licentivo نہیں ڈھونڈ سکتا: SDK_PREFIX کو configure کمانڈ میں انسٹالر کے ذریعے پرنٹ کردہ CMake سابقہ سے تبدیل کریں۔ کمپائلر، فن تعمیر اور libcurl کو انسٹال کردہ مقامی پیکیج سے مماثل ہونا چاہیے۔