1. إعداد المنتج والترخيص
استخدم هذا المسار لأداة سطح المكتب المساعدة أو تطبيق سطر الأوامر أو الخدمة التي تحتاج إلى ترخيص مقفل بالعقدة. ابدأ بميزة التصدير غير المقيدة حتى تتمكن من التحقق من الترخيص قبل إضافة عدادات الاستخدام.
تُحسب حصة الأجهزة من التفعيلات الحالية وتعود عند التحرير. تبقى التراخيص العادية محسوبة دون اتصال، وتعيد التراخيص العائمة الحصة تلقائيًا أيضًا عند انتهاء الإيجار.
- انسخ معرّف المنتج من لوحة التحكم > المنتجات. افتح مفاتيح التوقيع العامة للمنتج نفسه والصق جميع أزواج معرّف المفتاح والمفتاح العام في كود التهيئة بدلاً من YOUR_PRODUCT_ID وYOUR_KEY_ID وYOUR_PUBLIC_KEY. يمكن للتكامل السريع توليد هذا الكود. لا يلزم ملف إعداد للمنتج؛ يتصل SDK افتراضياً بـ https://www.licentivo.com.
- قم بتثبيت Go 1.26 أو الأحدث. في وحدة التحكم، افتح التكامل السريع وقم بإنشاء منتج.
- قم بتمكين ميزة تسمى التصدير في سياسة ترخيص المنتج. قم بإنشاء ترخيص اختبار أو تحديده.
2. قم بتثبيت SDK في مشروعك
ثبّت SDK 0.11.6 بتشغيل الأمر أدناه داخل مشروع تطبيقك أو بإضافة تبعية البناء. يتولى مدير الحزم جلب SDK؛ لا حاجة إلى تنزيل ملفات المصدر وفك ضغطها أو إعداد مسار محلي.
go get github.com/spf86/licentivo-sdk@v0.11.63. حماية عملية واحدة
هيّئ SDK عند بدء برنامجك أو تنشيطه. اقرأ مفتاح العميل من نافذة التنشيط ومرّر معرّف المنتج والمفاتيح الموثوقة. احتفظ بالعميل حتى إغلاق التطبيق. ضع RunFeature عند العملية الفعلية واستبدل التصدير بوظيفتك.
// One protected operation. Keep the client alive for the lifetime of your app.
package main
import (
"context"
"fmt"
licentivo "github.com/spf86/licentivo-sdk"
"os"
)
// BEGIN LICENTIVO PRODUCT
// Copy Product ID and all key ID/public key pairs from Console > Products > Signing public keys.
const productID = "YOUR_PRODUCT_ID"
var trustedKeys = map[string]string{"YOUR_KEY_ID": "YOUR_PUBLIC_KEY"}
// END LICENTIVO PRODUCT
func setting(name, fallback string) string {
if value := os.Getenv(name); value != "" {
return value
}
return fallback
}
// Call this at the business entry point, including keyboard/menu/CLI actions.
func exportReport(path string) error {
// Replace this write with your existing, non-metered export operation.
return os.WriteFile(path, []byte("A report generated by the licensed application.\n"), 0600)
}
func run() error {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// In a GUI, obtain key from the activation input. Later starts use an empty key.
client, err := licentivo.OpenProduct(ctx, productID, trustedKeys, os.Getenv("LICENTIVO_LICENSE_KEY"), func(err error) {
fmt.Fprintln(os.Stderr, "Background verification:", err)
})
if err != nil {
return err
}
defer client.Close() // Floating seats return; node-locked registration stays.
feature := setting("LICENTIVO_FEATURE", "export")
path := setting("LICENTIVO_OUTPUT", "licensed-report.txt")
action := func() error { return exportReport(path) }
if os.Getenv("LICENTIVO_METERED") == "1" {
err = client.RunMeteredFeature(ctx, feature, 1, os.Getenv("LICENTIVO_OPERATION_ID"), action)
} else {
err = client.RunFeature(feature, action)
}
if err != nil {
return err
}
fmt.Printf("License OK: %s is available\nExport completed: %s\n", feature, path)
return nil
}
func main() {
if err := run(); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(2)
}
}
4. احتفظ بعميل واحد طوال مدة التطبيق
في التطبيق الحقيقي، افتح العميل عند بدء التشغيل ثم ضع RunFeature داخل زر التصدير أو معالج الأوامر. إبقاء العميل على قيد الحياة حتى إيقاف التشغيل. إغلاق توقف العمل في الخلفية؛ فهو يحافظ على التسجيل العادي المقفل بالعقدة.
يقوم SDK بتخزين بيانات الاعتماد المرتبطة بالجهاز بعد التنشيط. يمكن لعمليات البدء اللاحقة تمرير مفتاح فارغ واستعادته من نفس حساب المستخدم وموقع ذاكرة التخزين المؤقت. لا تحتاج إلى تخزين معرفات التنشيط أو إرسال HTTP نبضات بنفسك.
يمكن استعادة عقد الإيجار غير المتصل بالعقدة الصالح على الفور بينما يتم تحديث SDK عبر الإنترنت في الخلفية. تحتاج السياسة العائمة أو المتوفرة عبر الإنترنت فقط إلى استجابة خادم ناجحة. لا تعامل مطلقًا خطأ الخلفية المسجل كإذن لتجاوز التحقق الفاشل من الميزات.
5. التحقق من العمليات المسموح بها والمحظورة
- قم بالتشغيل مرة واحدة باستخدام مفتاح الاختبار وتأكد من وجود التقرير.
- قم بإزالة LICENTIVO_LICENSE_KEY وتشغيله مرة أخرى تحت نفس المستخدم: يجب استعادة بيانات الاعتماد المحفوظة.
- تغيير التصدير إلى ميزة غير موجودة في الترخيص: يجب أن تقوم العملية بإرجاع خطأ دون كتابة تقرير.
- تحقق من إعادة التشغيل دون اتصال فقط عندما تسمح السياسة بذلك ويكون عقد الإيجار الموقع صالحًا.
مشاكل التكامل المشتركة
تحقق من معرّف المنتج وجميع أزواج معرّف المفتاح والمفتاح العام وترخيص العميل. المفاتيح العامة تخص المنتج؛ التراخيص وبيانات اعتماد الأجهزة منفصلة. لا توزّع مفاتيح الاختبار أو مفاتيح API الإدارية.
تتطلب الميزة المرفوضة التحقق من اسم الميزة وسياسة الترخيص؛ يتحقق RunFeature من الاستحقاق، وليس الاستخدام المتبقي. استخدم RunMeteredFeature للعداد.
تتطلب حدود الأجهزة أو الترخيص منتهي الصلاحية أو الرفض الصريح للخادم من العميل أو البائع حل مشكلة التفويض. أظهر الخطأ ومعرف الطلب حيثما كان ذلك متاحًا. لا تقم أبدًا بتضمين مفاتيح إدارة البائعين في التطبيق.