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 ত্রুটি দেখান। একটি ব্যর্থ অনুমোদন রপ্তানি ফাংশন কল করা উচিত নয়.
RunFeature বৈশিষ্ট্য অ্যাক্সেস পরীক্ষা করে; মিটারযুক্ত বৈকল্পিক সংরক্ষণ করে এবং কনফিগার করা ব্যবহার নিষ্পত্তি করে। প্রকৃত ব্যবসায়িক কাজের প্রতি একটি স্থিতিশীল অপারেশন আইডি ব্যবহার করুন এবং একটি বাধাপ্রাপ্ত কাজ পুনরুদ্ধার করার আগে এর টেকসই ফলাফল পরিদর্শন করুন।
CMake Licentivo খুঁজে পাচ্ছে না: SDK_PREFIX কনফিগার কমান্ডে ইনস্টলার দ্বারা মুদ্রিত CMake উপসর্গ দিয়ে প্রতিস্থাপন করুন। কম্পাইলার, আর্কিটেকচার এবং libcurl অবশ্যই ইনস্টল করা নেটিভ প্যাকেজের সাথে মেলে।