تنزيل Markdownالوثيقة الأصلية على GitHub
حدود مدة شراء Launch وSDK الحساب
طُورت هذه التغييرات وتحقق منها محليًا فقط؛ لم يُنشر Launch ولم تُصدر حزمة SDK. يعتمد المصدر الحالي على بروتوكول ترخيص حساب Licentivo وتحديث SDK الرسمي المصاحب، ولا يمكن خلطه مع خادم قديم لا يدعم إلا مفاتيح الترخيص طويلة الأجل.
المسؤوليات
| القدرة | الجهة المسؤولة |
|---|---|
| التسجيل والدخول وأمان الحساب والمنتجات والطلبات والدفع والاسترداد | Launch |
| عروض التجديد/الترقية وحساب دورات الشراء وأوقات البداية والنهاية المطلقة | Launch |
| تنفيذ تعيين مراجع الخطط إلى منتجات/سياسات الترخيص والتحقق من السياسة | Licentivo؛ يوفر Launch مدخل الاختيار والتسجيل |
| التراخيص وأذونات الميزات وحصص الأجهزة وجلسات الترخيص والتراخيص دون اتصال | Licentivo وSDK الرسمي |
| قائمة الأجهزة وفك الربط عن بُعد | Licentivo؛ يمرر Launch طلبات الحساب الحالي ويعرض النتائج |
| حفظ بيانات الدخول واستعادة الحساب ومدخل الخروج | Launch SDK |
لا يمكن لطلبات Launch أو مدة الشراء أو علامة اكتمال المزامنة السماح بالميزات المحمية. يجب أن ينفذ العميل الأعمال المحمية عبر واجهات تشغيل SDK الرسمي مثل RunFeature.
يحفظ كل منتج Launch مسار منتج Licentivo عامًا وثابتًا. يمكن لخطط المنتج نفسه اختيار سياسات مختلفة، لكن لا يمكنها التبديل إلى منتج بعيد آخر؛ ويُتحقق من حفظ التعيينات تسلسليًا بقفل صف قاعدة البيانات للمنتج المشترك. تقرأ هوية العميل ونشر الخطة وإعداد تكامل SDK الربط نفسه، ولا تستطيع المسودة تغيير سياق المنتج للعملاء الذين اشتروا. لا يتحقق هذا إلا من اتساق إعداد التكامل ولا يقرر ترخيص الميزات أو الأجهزة. عند افتقار قاعدة قديمة للحقل الثابت تُفضل مراجعة تاريخ الشراء والنشر؛ وإذا تعذر التأكيد بصورة فريدة يُعاد PRODUCT_MAPPING_CONFLICT، راجع إصلاح تزامن التعيين.
مزامنة مدة الشراء
استخدم الواجهات الحالية دون إضافة حقائق دفع أو استرداد أو خدمة عروض:
POST /api/v1/launch/connections、PUT /connections/{id}: تسجيل مفاتيح التوقيع العامة للهوية وإنشاء اتصالين منفصلين لبيئتي الإنتاج والاختبار.PUT /api/v1/launch/connections/{id}/plans/{plan}: تسجيل مرجع إصدار خطة Launch غير القابل للتكرار وإصداري المنتج والسياسة البعيدين.POST /api/v1/launch/connections/{id}/events: إرسال لقطة شراء كاملة ذات إصدار.GET /api/v1/launch/connections/{id}/events/{event}: تأكيد نتيجة المعالجة.POST /api/v1/launch/connections/{id}/events/{event}/retry: إعادة محاولة الحدث الأصلي بعد المراجعة.
لا تحتوي اللقطة إلا على رقم الحدث والبيئة ونوع الحدث ومرجع الشراء ومرجع الحساب المجهول ومنتج Launch ومرجع إصدار الخطة والإصدار المتزايد والقيمتين المطلقتين valid_from / valid_until؛ ويُرفق معرّف الترخيص القديم عند الترحيل. لا تُرسل مفاتيح الدفع أو الأسعار أو بريد العميل أو مفاتيح الترخيص طويلة الأجل. تكون valid_until للشراء الدائم null ويتحقق Licentivo من مطابقتها للسياسة.
يؤكد Launch الدفع ويسجل فترات تغطية الشراء غير القابلة للتغيير ويحفظ مهمة المزامنة في معاملة قاعدة بيانات واحدة. يُحسب الموعد النهائي وفق دورات تقويمية يومية/شهرية/سنوية؛ ويستخدم التجديد مرجع الشراء الأصلي، وإذا تم الدفع بعد الانتهاء يبدأ من وقت الدفع الفعلي. تظل عروض الترقية والمدد محسوبة في Launch.
يرسل كل تغيير قيمًا مطلقة كاملة؛ وتستخدم إعادة المحاولة معرّف الحدث والجسم نفسيهما دون إرسال «أضف N يومًا أخرى». تحفظ المهمة الطلب والاتصال البعيد وتقدم المعالجة بصورة دائمة؛ ولا يؤدي فقد الاستجابة أو إعادة تشغيل العملية أو العمال المتزامنون إلى إضافة المدة مرة أخرى.
لا يعني HTTP 202 إلا أن Licentivo استلم. لا تُعلّم المزامنة مكتملة إلا بعد استلام applied؛ ويستمر الاستعلام عن pending، وتبقى manual_review وstale التي لا يمكن تأكيدها قيد المراجعة. تُعاد محاولة أخطاء الشبكة بتأخير متزايد، وعند بلوغ حد الفشل المتتالي تدخل المراجعة اليدوية.
لا يزيل الاسترداد إلا فترة تغطية الطلب المقابل: يعيد استرداد طلب الترقية الخطة الأساسية؛ ويزيل استرداد طلب التجديد الامتداد المقابل؛ وعند بقاء شراء غير مسترد تُزامن النتيجة المعاد حسابها دون إلغاء جميع المشتريات. بعد استرداد جميع المشتريات يُرسل entitlement.refunded. تستخدم إعادة الشراء لاحقًا مرجع شراء جديدًا لمنع إحياء الترخيص البعيد الملغى.
يزيل رد المبلغ أو عكس الدفع المؤكد من القناة أيضًا تغطية شراء الطلب المقابل فقط؛ ويظهر الطلب بحالة reversed، ويعالج Licentivo تغيير الترخيص الفعلي بعد تطبيق لقطة الشراء. لا تغير النزاعات المعلقة سجل الشراء. يمكن استعادة إشعارات العكس التاريخية المنتظرة للمراجعة بإعادة التحقق من توقيعها وإرسالها عبر القناة الأصلية.
بعد دخول استرداد مجهول المراجعة اليدوية، يمكن للمسؤول استعادة العملية الأصلية عبر POST /api/v1/admin/refunds/{id}/reconcile. يجب أن يطابق الإيصال المعاملة الأصلية والعملة والمبلغ؛ ولا يجوز تغيير رقم العملية الأصلي أو وقت الموافقة، ولا إعادة إرسال طلب الأموال بصورة عمياء بعد تجاوز نافذة إعادة المحاولة الآمنة.
الحساب والعميل
- يستخدم العميل
POST /api/v1/auth/loginلإنشاء جلسة دخول حقيقية لسطح المكتب. - يطلب Launch SDK الواجهة
POST /api/v1/software/products/{id}/identityمع تحديدsandboxأوlive. - يصدر Launch تأكيد هوية لا يتجاوز 120 ثانية، محددًا المستلم وسياق المنتج/الشراء، ويحتوي على
sidتسجيل الدخول الحقيقي وانتهاء الدخول. لا يحتوي التأكيد على الميزات أو حصة الأجهزة أو أذونات عدم الاتصال. - يمرر Launch SDK القيم
identity_tokenوlaunch_connection_idوenvironmentإلى SDK الرسمي في الذاكرة فقط، وتكونlicense_keyفارغة. - يستدعي SDK الرسمي واجهة Licentivo
/api/v1/launch/exchange؛ ويقرر Licentivo الترخيص ويرسل بيانات اعتماد الجهاز والترخيص الموقع.
تستخدم سجلات حساب Launch العادية v2 وتحفظ جلسة الحساب ومعلومات المسار العام فقط، دون التأكيد أو مفتاح الترخيص أو المنحة. عند الخروج الصريح تتحول إلى مهمة خاصة v3 للإلغاء فقط ولا يمكن استعادتها كتسجيل دخول؛ وتُحذف بعد تأكيد إلغاء جلسة Launch. تعيد واجهة /credential القديمة HTTP 410. يمكن توزيع المفتاح العام ومعرّف المنتج مع التطبيق؛ ويبقى مفتاح الإدارة على الخادم فقط.
الخروج والإغلاق وفك الربط عن بُعد
| العملية | السلوك |
|---|---|
| الإغلاق العادي Close / Dispose / Drop | إيقاف بيئة التشغيل مع الاحتفاظ بالشراء وربط الجهاز والحساب الذي اختير تذكره |
| مدخل التوافق Logout / ReleaseDevice | وضع علامة خروج على الحساب المحلي واستدعاء خروج SDK الرسمي، ثم إلغاء الجلسة لدى Launch؛ ويُحتفظ بمهمة آمنة لخروج الحساب غير المؤكد |
| إدارة الأجهزة في Launch عند تعذر الوصول للجهاز | تمرير قائمة أجهزة Licentivo وطلبات فك الربط ونتائج المعالجة |
يوقف خروج SDK الرسمي استخدام الترخيص في العملية الحالية فورًا وينظف بيانات تشغيلها ويلغي الربط البعيد بتذكرة خروج مخصصة. عند فشل الشبكة يجب الاحتفاظ بملف SDK .logout.json؛ ويجب أن تظهر النتيجة انتظار الإلغاء البعيد ولا يجوز الإبلاغ عن نجاح فك الربط. لا يحذف Launch SDK دليل ذاكرة SDK الرسمي المؤقتة أو يجتازه لتنظيفه أو يعدله؛ ويستعيد SDK الرسمي معالجة التذاكر المعلقة عند إعادة تهيئة الذاكرة المقابلة.
لخروج حساب Launch أيضًا حالة مهمة مستقلة: عند فشل الشبكة أو الإلغاء أو فقد الاستجابة، لا تُحذف السجلات الآمنة اللازمة لإعادة المحاولة؛ ولا يؤدي الدخول أو الاستعادة أو الخروج مجددًا إلا إلى إعادة إرسال إلغاء الجلسة الأصلية، ولا يمكن استخدام المهمة لاستعادة الدخول. تُحذف بعد النجاح أو تأكيد HTTP 401 بطلان الجلسة. تتطلب الاستعادة بين العمليات Store آمنًا دائمًا؛ ولا يعمل MemoryStore إلا في العملية الحالية. راجع إصلاح إعادة محاولة الخروج والاختبار المشترك.
يحمل طلب فك الربط عن بُعد activation_id وexpected_generation المعادين من القائمة الأصلية، وتستخدم إعادة المحاولة operation_id نفسه. لا يحسب Launch مرات فك الربط ولا يوافق على طابور التحرير أو ينفذه بنفسه ولا يعيد محاولة عملية قديمة تلقائيًا بعد تحديث الجيل. تأتي المرات المتبقية وإمكانية التحرير والمراجعة والنتيجة النهائية جميعها من Licentivo.
تتطلب استعادة الحساب Restore الاتصال لتأكيد الحساب والحصول على تأكيد هوية جديد؛ ولا يختار Launch السماح دون اتصال بنفسه عند فشل خدمة الحساب. تتكامل التطبيقات التي تحتاج بدءًا دون اتصال وفق عقد استعادة SDK الرسمي؛ وتظل فحوص التوقيع ومدة عدم الاتصال والساعة من مسؤولية SDK الرسمي.
إلغاء الهوية على الخادم
التكامل مع واجهات Licentivo V39 الحالية، دون الحاجة إلى واجهات حقائق تجارية أو عروض:
POST /api/v1/launch/connections/{id}/session-revocations: إلغاءsidالمحدد أو عمليات دخول الحساب القديمة وإعادة إيصال معتمد متزامنًا.GET /api/v1/launch/connections/{id}/session-revocations/{event_id}: استرجاع النتيجة المعتمدة للحدث الأصلي لاستعادة طلب فقدت استجابته.
يستخدم خروج سطح المكتب العادي والخروج القسري لجلسة محددة scope=session؛ ويستخدم إبطال جميع الجلسات بسبب تغيير كلمة المرور أو إعادة ضبطها أو تغيير البريد أو تعطيل الحساب أو تغيير دور موظفي الموقع scope=account. لا يؤثر الخروج العادي من جلسة الموقع على برنامج العميل. يخطر Launch فقط بأن الهوية بطلت؛ ويتولى Licentivo جلسات الترخيص البعيدة وبيانات التشغيل وتحرير الأجهزة، دون تغيير مدة الشراء أو استهلاك حصة فك الربط التي يديرها Launch.
يكتمل إبطال الجلسة المحلية وإدراج الإشعار في الطابور ضمن معاملة واحدة. يجمّد الطابور الاتصالات والبيئات الموجودة حينها، ويعيد المحاولة بمعرّف الحدث وهوية الحساب المجهولة والطلب الأصلي أنفسها؛ ولا تتلقى الاتصالات المنشأة لاحقًا إلغاءات الحساب التاريخية. استعلم عن الإيصال الأصلي أولًا ولا تعد الإرسال إلا بعد تأكيد عدم وجوده؛ تُحفظ نتيجة كل بيئة بصورة مستقلة ولا يظهر الاكتمال إلا بعد استلام جميع إيصالات النجاح المطابقة. تعاد المحاولة تلقائيًا عند انقطاع الشبكة، وتدخل تعارضات بيانات الاعتماد/العقد المراجعة اليدوية. يمكن للمسؤول عرض الإشعار وإعادة المحاولة من صفحة مهام المزامنة؛ ولا تنشئ إعادة المحاولة حدث إلغاء جديدًا.
يستخدم الإلغاء على مستوى الحساب revoked_before عند أول استلام لدى Licentivo حدًا فاصلًا. تتوقف عمليات دخول سطح المكتب وتأكيدات الهوية الجديدة أثناء انتظار الإشعار؛ وبعد الاكتمال يجب أن يكون auth_time للدخول الحقيقي لاحقًا تمامًا لثانية الحد في إيصالات جميع البيئات. يمكن إعادة مصادقة دخول الثانية نفسها لاحقًا؛ ولا يتيح تحديث iat أو تأكيد الهوية استمرار الدخول القديم. يظل دخول الموقع متاحًا لعمليات الاستعادة. بعد إعادة تفعيل الحساب يجب تسجيل الدخول مجددًا ولا تُستعاد الجلسة القديمة.
ترحيل البيانات القديمة
تستخدم المشتريات ذات ربط الترخيص القديم المؤكد entitlement.migrated وترسل معرّف الترخيص القديم فقط دون قراءة المفتاح القديم أو إرساله. بعد تأكيد Licentivo الترحيل تُرسل لقطة إصدار جديد منفصلة لمزامنة المدة والحالة التجاريتين الحاليتين. تتطلب نتائج الإصدار القديمة غير المؤكدة والتراخيص غير المتوافقة مراجعة يدوية؛ ولا تُعاد أوامر الإدارة القديمة تلقائيًا.
يتكامل خروج SDK العادي وفك ربط الجهاز عن بُعد وإلغاء الهوية على الخادم مع الواجهات الحالية. يظل التعطيل عن بُعد مقيدًا بمدة الترخيص دون اتصال الذي أصدره SDK الرسمي؛ ولا يعد Launch بإلغاء فوري على جهاز غير متصل.
يستخدم خروج الحساب مهمة آمنة مستقلة وملخص خروج الجلسة المحلية وتنسيقًا بين العمليات؛ ولا يعالج المثيل القديم إلا تسجيل دخوله. بعد فشل التخزين ترسل الاستعادة إلغاء الحساب أولًا دون الحصول على هوية أو بدء الترخيص؛ ويظل Licentivo مسؤولًا عن الميزات والترخيص دون اتصال وجيل الجهاز وحصة التحرير. راجع سجل الإصلاح والاختبار المشترك للطرفين.