المتطلبات الأساسية
- حساب Mellowtel ومفتاح التكوين (جيب تاعك من لوحة التحكم).
- تطبيق Electron عنده وصول للعملية الرئيسية.
التثبيت
1. تثبيت الحزمة
من جذر المشروع تاعك، ثبّت الـ SDK تاع Electron:2. أضف إلى الكود تاعك
في ملف العملية الرئيسية تاع Electron (عادةًmain.ts أو main.js)، استورد الـ SDK، اختياريًا نادى setupMellowtelApp() قبل ما التطبيق يكون جاهز، أنشئ Mellowtel بمفتاح التكوين تاعك، اطلب الموافقة من المستخدم، ومن بعد نادى init() باش تبدا الخدمة.
عوّض
YOUR_CONFIGURATION_KEY بالمفتاح من لوحة التحكم تاع Mellowtel.new Mellowtel(configurationKey, options?)ينشئ الـ SDK. الخيار الوحيد المتاح اليوم هوdisableLogs، اللي الافتراضي تاعهاtrue. حطهاfalseكي تكون تدمج باش تشوف حالة الاتصال ونشاط الطلبات في الطرفية تاعك.requestConsent(window, incentive)يعرض صندوق رسالة Electron الأصلي مربوط بالـBrowserWindowاللي تمررها. الحجة الثانية هي العنوان البارز تاع الحوار (مثلاً،"احصل على 3 أشهر مجانًا")، معروض فوق شرح ثابت لوش يدير Mellowtel. يرجعtrueإذا المستخدم وافق،falseإذا رفض أو غلق الحوار، وundefinedإذا كانت الموافقة موجودة بالفعل. الـ SDK يحتفظ بقرار الاشتراك تلقائيًا، يعني ما تحتاجش تناديoptIn()بعدين.init()ترمي خطأ غير كيconfigurationKeyيكون فارغ. إذا المستخدم ما وافقش، تسجل وترجع بلا ما تبدا. وإلا تتصل بـ Mellowtel باش تبدا معالجة الطلبات. النداء ما يحبسش واجهة المستخدم تاع الـ renderer، يعني النوافذ تبقى تستجيب كي يتأسس الاتصال.
اختياري: تقليل المطالبات غير المتوقعة تاع النظام
الـ SDK يجي مع مساعد اختياري،setupMellowtelApp()، اللي يقلل من المطالبات غير المتوقعة تاع النظام (نوافذ الملء التلقائي، أشرطة الترجمة، تراكبات الوسائط، حوارات التشغيل الأول) خلال العمل في الخلفية.
هاد العلامات تنطبق على العملية الكاملة تاع Electron، مش غير على Mellowtel. تجاوز المساعد إذا كان المنتج تاعك يعتمد على مطالبات المصادقة الأصلية أو واجهة مستخدم مدير كلمات المرور.
نادى عليه في أعلى ملف العملية الرئيسية تاعك، قبل app.whenReady(), واستورده جنب التصدير الافتراضي من mellowtel-electron. شوف README الأصلي للاستخدام الرسمي.
موافقة المستخدم
عندك زوج طرق باش تتعامل مع الموافقة:- استعمل الحوار الأصلي المدمج عبر
requestConsent(window, incentive). هادي هي الطريقة الأسرع ووش يعرضه المقتطف اللي فوق. يعرضdialog.showMessageBoxالأصلي تاع Electron مع نص الحافز تاعك كعنوان ويحتفظ بقرار المستخدم تلقائيًا. - بني واجهة المستخدم تاع الموافقة الخاصة بك وسير الـ SDK عبر
optIn(),optOut(), وgetOptInStatus(). استعمل هادي إذا كنت حابب تخصيص العلامة التجارية، تفسيرات أغنى، أو التوطين اللي يتجاوز وش يعرضه الحوار الأصلي.
وش لازم يتضمنه حوار الموافقة تاعك
1
شرح وش يدير Mellowtel
استعمل لغة بسيطة. مثال: “هاد التطبيق يستعمل Mellowtel باش يشارك عرض النطاق الترددي غير المستخدم تاع الإنترنت تاعك. في المقابل، تحصل على [ميزة/خاصية]. تقدر تلغي الاشتراك في أي وقت في الإعدادات.”
2
اعطي للمستخدمين خيار واضح
ضمّن خيارات قبول ورفض متميزة.
3
رابط للسياسات
ضمّن روابط لـ شروط الخدمة وسياسة الخصوصية.
خلي المستخدمين يغيروا الموافقة تاعهم لاحقًا
Mellowtel يوفر حوار إعدادات مدمج عبرshowConsentSettings(window). يعرض حوار أصلي مع أزرار الاشتراك / إلغاء الاشتراك اللي تتماشى مع الحالة الحالية تاع المستخدم، ويدير داخليًا optIn() أو optOut() (بالإضافة إلى إعادة الاتصال بـ Mellowtel عند الاشتراك) كي المستخدم يغير الخيار تاعه. اربطها بعنصر قائمة أو زر إعدادات في التطبيق تاعك باش المستخدمين يقدروا يرجعوا للاختيار تاعهم.
إذا كنت تفضل تبني شاشة الإعدادات الخاصة بك، نادى getOptInStatus() باش تقرأ الحالة الحالية وoptIn() / optOut() باش تغيرها.
مرجع الطرق
الفئةMellowtel تعرض الطرق العامة التالية. كلهم متاحين على المثيل اللي أنشأته بـ new Mellowtel(configurationKey, options?).
دورة الحياة
init(): Promise<void>تبدا الخدمة إذا كان المستخدم مشترك، أو ترجع بلا ما تبدا إذا ما كانش. ترمي خطأ غير كي يكون مفتاح التكوين فارغ.shutdown(): Promise<void>ينظف موارد الـ SDK كي التطبيق يغلق. يغلق الاتصال بـ Mellowtel، يحرر نوافذ الطلبات المعزولة، ويمسح المؤقتات الخلفية. يحافظ على تفضيل الاشتراك تاع المستخدم.requestConsent(window: BrowserWindow, incentive: string): Promise<boolean | undefined>يعرض حوار الموافقة الأصلي المدمج ويحتفظ بالنتيجة. يرجعtrueعند القبول،falseعند الرفض أو الإغلاق،undefinedإذا كانت الموافقة موجودة بالفعل.showConsentSettings(window: BrowserWindow): Promise<void>يعرض حوار إدارة الموافقة المدمج. الـ SDK يدير التحولات تاع الاشتراك / إلغاء الاشتراك داخليًا كي المستخدم يغير الخيار تاعه.
optIn(): Promise<void>يعلّم المستخدم كأنه مشترك بلا ما يعرض حوار. استعمل هادي غير بعد ما تجمع الموافقة عبر واجهة المستخدم الخاصة بك.optOut(): Promise<void>يعلّم المستخدم كأنه غير مشترك وينفذ تنظيف كامل (نفس الموارد تاعshutdown(), بالإضافة إلى مسح تفضيل الموافقة المحفوظ). ما تحتاجش تناديshutdown()بعدين.getOptInStatus(): boolean | undefinedيرجع الحالة الحالية تاع الاشتراك، أوundefinedإذا ما دارش المستخدم اختيار.getNodeId(): stringيرجع معرف العقدة تاع Mellowtel لهاذ التثبيت. مفيد كي تقدم تذاكر الدعم.
electron-store وتبقى بعد إعادة تشغيل التطبيق. اعرضهم في واجهة المستخدم الخاصة بك إذا كنت حابب تبين للمستخدمين تأثير الاشتراك تاعهم.
getTotalRequestCount(): numberيرجع مجموع الطلبات المعالجة منذ التثبيت.getDailyRequestCount(): numberيرجع عدد الطلبات المعالجة اليوم.getRequestCountForDate(date: string): numberيرجع العدد لتاريخ معينYYYY-MM-DD.getDailyRequestsHistory(): { [date: string]: number }يرجع كل عدد يومي كخريطة.getRequestCountsInRange(startDate: string, endDate: string): { [date: string]: number }يرجع الأعداد لفترة زمنية.getRequestCounts(): { total: number; daily: number; dailyHistory: { [date: string]: number } }يرجع كل الثلاث عدادات في نداء واحد.
دورة الحياة وإغلاق التطبيق
بعد الطلب الأول، الـ SDK يقدر يحتفظ بنوافذ BrowserWindows معزولة، خارج الشاشة للعمل في الخلفية. التطبيقات المضيفة لازم تناديshutdown() كي التطبيق يغلق فعليًا باش يحرر هاد العمال.
shutdown():
- يغلق الاتصال بـ Mellowtel.
- يحرر نوافذ الطلبات المعزولة.
- يمسح المؤقتات الخلفية.
- يحافظ على تفضيل الاشتراك تاع المستخدم.
التطبيقات ذات النافذة الواحدة
نادىshutdown() كي النافذة الرئيسية للتطبيق تغلق:
window-all-closed تاع Electron. العمال في الخلفية يقدروا يمنعوه من التشغيل، يعني تعامل مع الخروج الصريح (أو معالج closed تاع النافذة الرئيسية اللي فوق) كإشارة باش تنادي shutdown().
تطبيقات الدرج
ما تناديشshutdown() كي النافذة تتصغر فقط إلى درج النظام. نادى عليها من إجراء الخروج الصريح:
تطبيقات macOS
إذا التطبيق يبقى نشط بعد ما تغلق نوافذه، نادىshutdown() غير كي المستخدم يخرج فعليًا من التطبيق.
إلغاء الاشتراك
optOut() ينفذ تنظيف كامل بالفعل:
shutdown() بعدين. على عكس shutdown(), optOut() يغير تفضيل الموافقة المحفوظ.
البدء من جديد
بعدshutdown() أو optOut(), Mellowtel يقدر يبدا من جديد:
حفظ الموافقة
الاشتراك يتخزن في الإعدادات العادية تاع تطبيق Electron تاعك (نفس موقعelectron-store كإعدادات التطبيق الأخرى):
- macOS:
~/Library/Application Support/<YourAppName>/config.json - Windows:
%APPDATA%\<YourAppName>\config.json - Linux:
~/.config/<YourAppName>/config.json
حل المشاكل
خطأ "الحزمة غير موجودة" أثناء التثبيت
خطأ "الحزمة غير موجودة" أثناء التثبيت
- تأكد أنك تثبت
mellowtel-electron(مش اسم حزمة GitHub Packages الموجه). - امسح ذاكرة التخزين المؤقت تاع npm وجرب مرة أخرى بتشغيل
npm cache clean --forceمتبوعًا بـnpm install mellowtel-electron.
حوار الموافقة ما يظهرش
حوار الموافقة ما يظهرش
- تأكد أنك تنادي
requestConsentبعد ماapp.whenReady()تحل وتكون عندكBrowserWindowصالحة اللي ما زالت مفتوحة. - إذا كنت تستعمل
setupMellowtelApp(), تحقق أنه ينادى قبلapp.whenReady(), مش بعد.
"init() يخدم بلا أخطاء لكن ما يصير والو"
"init() يخدم بلا أخطاء لكن ما يصير والو"
هادا عن قصد.
init() ترجع بلا ما تبدا كي المستخدم ما وافقش. تحقق من getOptInStatus() باش تأكد. إذا رجعت undefined أو false, نادى requestConsent الأول. رسالة “المستخدم ما وافقش” ما تطبعش كي disableLogs تبقى في الافتراضي تاعها (شوف “ما كاينش سجلات في الطرفية” تحت), يعني الطرفية ما تعطيكش إشارة في أي اتجاه حتى تقلب هاد العلامة.ما كاينش سجلات في الطرفية
ما كاينش سجلات في الطرفية
خيار المنشئ
disableLogs الافتراضي تاعه true. مرر { disableLogs: false } كالحجة الثانية للمنشئ كي تكون تدمج باش تظهر حالة الاتصال ونشاط الطلبات في الطرفية تاعك. هادا هو أسرع طريقة باش تفرق بين “ما وافقش” (شوف فوق) وفشل الاتصال الحقيقي.الوقت المقدر للإكمال: 10-15 دقيقة. إذا كنت تحتاج مساعدة أو عندك ملاحظات، تواصل معنا على info@mellowtel.com أو انضم إلى مجتمع Discord تاعنا.