Передумови
- Обліковий запис Mellowtel і ключ конфігурації (отримайте свій на dashboard).
- Додаток Electron з доступом до основного процесу.
Встановлення
1. Налаштування автентифікації npm
Створіть файл.npmrc у кореневій директорії вашого проекту, щоб вказати npm на реєстр Mellowtel GitHub Packages і автентифікувати встановлення:
YOUR_NPM_TOKEN на токен встановлення нижче. Натисніть, щоб відкрити, а потім скористайтеся значком копіювання на блоці коду, щоб скопіювати його в буфер обміну.
Показати токен встановлення
Показати токен встановлення
2. Встановіть пакет
З кореня вашого проекту встановіть SDK для Electron:3. Додайте до вашого коду
У вашому файлі основного процесу Electron (зазвичайmain.ts або main.js), імпортуйте SDK, створіть його екземпляр з вашим ключем конфігурації, запросіть згоду користувача, а потім викличте init(), щоб запустити сервіс.
Замініть
YOUR_CONFIGURATION_KEY на ключ з вашого Mellowtel dashboard.new Mellowtel(configurationKey, options?)створює екземпляр SDK. Єдиний доступний варіант на сьогодні — цеdisableLogs, який за замовчуванням встановлено вtrue. Встановіть його вfalseпід час інтеграції, щоб бачити стан з’єднання та активність запитів у вашому терміналі.requestConsent(window, incentive)відображає рідне вікно повідомлення Electron, прив’язане доBrowserWindow, яке ви передаєте. Другий аргумент — це помітний заголовок діалогу (наприклад,"Отримайте 3 місяці безкоштовно"), показаний над фіксованим поясненням того, що робить Mellowtel. Він повертаєtrue, якщо користувач приймає,false, якщо користувач відхиляє або закриває діалог, іundefined, якщо згода вже є в файлі. SDK автоматично зберігає рішення про згоду, тому вам не потрібно викликатиoptIn()після цього.init()кидає виключення лише тоді, колиconfigurationKeyпорожній. Якщо користувач не погодився, він записує в лог і повертається тихо. В іншому випадку він відкриває WebSocket до бекенду Mellowtel. Виклик не блокує UI рендерера, тому вікна залишаються чуйними, поки з’єднання встановлюється.
Запобігання перериванням системних діалогів (рекомендовано)
SDK постачається з додатковим помічником,setupMellowtelApp(), який налаштовує командні прапори Electron для придушення системних діалогів (спливаючі вікна автозаповнення, панелі перекладу, запити автентифікації NTLM / Kerberos, інтеграція з менеджером паролів, накладки медіа, діалоги першого запуску), які інакше переривали б ваших користувачів, коли приховані вікна Mellowtel обробляють запити у фоновому режимі.
Викличте його на початку вашого файлу основного процесу, перед app.whenReady(), і імпортуйте його разом із експортом за замовчуванням з @mellowtel-inc/mellowtel-electron. Дивіться upstream README для канонічного використання.
Згода користувача
У вас є два шляхи для обробки згоди:- Використовуйте вбудований рідний діалог через
requestConsent(window, incentive). Це найшвидший шлях, і саме це показує фрагмент вище. Він відображає ріднийdialog.showMessageBoxElectron з вашим текстом стимулу як заголовок і автоматично зберігає рішення користувача. - Створіть власний інтерфейс згоди і керуйте SDK через
optIn(),optOut(), іgetOptInStatus(). Використовуйте це, якщо ви хочете власний брендинг, багатші пояснення або локалізацію, яка виходить за межі того, що пропонує рідний діалог.
Що має включати ваш діалог згоди
Поясніть, що робить Mellowtel
Використовуйте просту мову. Приклад: “Цей додаток використовує Mellowtel для обміну вашим невикористаним інтернет-трафіком. Взамін ви отримуєте [вигода/функція]. Ви можете відмовитися в будь-який час у налаштуваннях.”
Посилання на політики
Включіть посилання на Умови використання та Політику конфіденційності.
Дозвольте користувачам змінювати свою згоду пізніше
Mellowtel надає вбудований діалог налаштувань черезshowConsentSettings(window). Він відображає рідний діалог з кнопками Opt In / Opt Out, які відповідають поточному стану користувача, і внутрішньо викликає optIn() або optOut() (плюс повторне підключення WebSocket при згоді), коли користувач перемикає. Підключіть його до пункту меню або кнопки налаштувань у вашому додатку, щоб користувачі могли переглянути свій вибір.
Якщо ви віддаєте перевагу створенню власного екрану налаштувань, викличте getOptInStatus(), щоб прочитати поточний стан, і optIn() / optOut(), щоб змінити його.
Довідка по методам
КласMellowtel надає наступні публічні методи. Усі вони доступні на екземплярі, який ви створили за допомогою new Mellowtel(configurationKey, options?).
Життєвий цикл
init(): Promise<void>запускає сервіс, якщо користувач погодився, або тихо повертається раніше, якщо ні. Кидає виключення лише тоді, коли ключ конфігурації порожній.requestConsent(window: BrowserWindow, incentive: string): Promise<boolean | undefined>показує вбудований рідний діалог згоди і зберігає результат. Повертаєtrueпри прийнятті,falseпри відхиленні або закритті,undefined, якщо згода вже була дана.showConsentSettings(window: BrowserWindow): Promise<void>показує вбудований діалог управління згодою. SDK обробляє переходи Opt In / Opt Out внутрішньо, коли користувач перемикає свій вибір.
optIn(): Promise<void>позначає користувача як того, хто погодився, без показу діалогу. Використовуйте це лише після збору згоди через ваш власний інтерфейс.optOut(): Promise<void>позначає користувача як того, хто відмовився, і закриває активне з’єднання WebSocket.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 для Electron не реєструє власні обробникиbefore-quit або will-quit. Коли ваш процес Electron завершує роботу, фонове з’єднання WebSocket розривається разом з ним, і ніякого явного очищення з вашого боку не потрібно.
Якщо ви хочете відключити Mellowtel під час сеансу (наприклад, коли користувач перемикає налаштування “пауза” у вашому додатку), викличте optOut(). Це очищає прапор згоди і закриває активне з’єднання. Щоб підключитися знову, викличте optIn(), а потім init().
Збереження згоди
Стан згоди зберігається в стандартному для платформи шляху конфігураціїelectron-store:
- macOS:
~/Library/Application Support/<YourAppName>/config.json - Windows:
%APPDATA%\<YourAppName>\config.json - Linux:
~/.config/<YourAppName>/config.json
Вирішення проблем
Помилка "Package not found" під час встановлення
Помилка "Package not found" під час встановлення
- Переконайтеся, що
.npmrcзнаходиться в корені проекту, поруч з вашимpackage.json. - Переконайтеся, що токен не має пробілів на початку або в кінці.
- Очистіть кеш npm і повторіть спробу, виконавши
npm cache clean --force, а потімnpm install.
Помилка "Unauthorized" або 401 під час встановлення
Помилка "Unauthorized" або 401 під час встановлення
Діалог згоди ніколи не з'являється
Діалог згоди ніколи не з'являється
- Переконайтеся, що ви викликаєте
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.