Skip to main content
Інтегруйте Mellowtel у ваш кросплатформний додаток Electron, щоб дозволити користувачам ділитися невикористаною пропускною здатністю інтернету в обмін на винагороди або преміум-функції. Electron SDK працює скрізь, де працює Electron (macOS, Windows та Linux).
Згода користувача є обов’язковою. SDK працює лише тоді, коли користувач явно дав згоду. init() повертається без запуску, коли немає згоди, тому якщо ви бачите, що SDK запускається без помилок, але ніколи не обробляє запити, найімовірніша причина полягає в тому, що користувач ще не дав згоди.

Попередні вимоги

  • Обліковий запис Mellowtel та ключ конфігурації (отримайте свій на панелі інструментів).
  • Додаток Electron з доступом до основного процесу.

Встановлення

1. Встановіть пакет

З кореня вашого проекту встановіть Electron SDK:

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, щоб почати обробку запитів. Виклик не блокує UI рендерера, тому вікна залишаються чутливими під час встановлення з’єднання.

Додатково: зменшення несподіваних запитів ОС

SDK постачається з додатковим помічником, setupMellowtelApp(), який зменшує несподівані запити ОС (автозаповнення, панелі перекладу, медіа-накладки, діалоги першого запуску) під час роботи з запитами у фоновому режимі. Ці прапори застосовуються до всього процесу Electron, а не лише до Mellowtel. Пропустіть помічника, якщо ваш продукт покладається на нативні запити автентифікації або UI менеджера паролів. Викличте його на початку вашого файлу основного процесу, перед app.whenReady(), і імпортуйте його разом з експортом за замовчуванням з mellowtel-electron. Дивіться оригінальний README для канонічного використання.

Згода користувача

Відображення діалогу згоди є обов’язковим. Ви повинні дозволити користувачам явно дати згоду перед викликом init(), і ви повинні надати спосіб для них керувати своїм станом згоди в будь-який час.
У вас є два шляхи для обробки згоди:
  1. Використовуйте вбудований нативний діалог через requestConsent(window, incentive). Це найшвидший шлях і те, що показано у наведеному вище фрагменті. Він відображає нативний діалог Electron dialog.showMessageBox з вашим текстом стимулу як заголовок і автоматично зберігає рішення користувача.
  2. Створіть свій власний UI згоди і керуйте SDK через optIn(), optOut(), і getOptInStatus(). Використовуйте це, якщо ви хочете налаштувати брендинг, багатші пояснення або локалізацію, що виходить за межі того, що пропонує нативний діалог.

Що має містити ваш діалог згоди

1

Поясніть, що робить Mellowtel

Використовуйте просту мову. Приклад: “Цей додаток використовує Mellowtel для спільного використання вашої невикористаної пропускної здатності інтернету. Взамін ви отримуєте [вигода/функція]. Ви можете відмовитися в будь-який час у налаштуваннях.”
2

Дайте користувачам чіткий вибір

Включіть окремі варіанти Прийняти та Відхилити.
3

Посилання на політики

Дозвольте користувачам змінювати свою згоду пізніше

Mellowtel надає вбудований діалог налаштувань через showConsentSettings(window). Він відображає нативний діалог з кнопками Opt In / Opt Out, які відповідають поточному стану користувача, і внутрішньо викликає optIn() або optOut() (плюс повторне підключення до Mellowtel при виборі opt-in), коли користувач перемикає свій вибір. Підключіть його до елемента меню або кнопки налаштувань у вашому додатку, щоб користувачі могли переглядати свій вибір. Якщо ви віддаєте перевагу створити власний екран налаштувань, викличте 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 обробляє переходи opt-in / opt-out внутрішньо, коли користувач перемикає свій вибір.
Ручне управління згодою
  • optIn(): Promise<void> позначає користувача як такого, що дав згоду, без показу діалогу. Використовуйте це лише після збору згоди через ваш власний UI.
  • optOut(): Promise<void> позначає користувача як такого, що відмовився, і виконує повне очищення (ті ж ресурси, що і shutdown(), плюс очищення збереженої переваги згоди). Немає потреби викликати shutdown() після цього.
  • getOptInStatus(): boolean | undefined повертає поточний стан згоди, або undefined, якщо користувач ніколи не робив вибору.
  • getNodeId(): string повертає ідентифікатор вузла Mellowtel для цієї установки. Корисно при поданні заявок на підтримку.
Лічильники запитів Кількість запитів зберігається локально через electron-store і зберігається після перезапуску додатку. Відображайте їх у вашому власному UI, якщо ви хочете показати користувачам вплив їх згоди.
  • 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() проти optOut(): shutdown() виконується, коли додаток закривається — перевага користувача зберігається. optOut() виконується, коли користувач змінює свою думку — згода відкликається, і SDK зупиняється.

Одновіконні додатки

Викличте shutdown(), коли основне вікно додатку закривається:
Не покладайтеся лише на подію Electron window-all-closed. Фонові робочі процеси можуть завадити її запуску, тому розглядайте явний вихід (або обробник 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 зберігає самостійно.

Усунення несправностей

  1. Переконайтеся, що ви встановлюєте mellowtel-electron (не ім’я пакета з GitHub Packages).
  2. Очистіть кеш npm і повторіть спробу, виконавши npm cache clean --force, а потім npm install mellowtel-electron.
  1. Переконайтеся, що ви викликаєте requestConsent після того, як app.whenReady() було вирішено, і з дійсним BrowserWindow, яке все ще відкрите.
  2. Якщо ви використовуєте setupMellowtelApp(), перевірте, що він викликається перед app.whenReady(), а не після.
Це за задумом. init() повертається без запуску, коли користувач не дав згоди. Перевірте getOptInStatus(), щоб підтвердити. Якщо він повертає undefined або false, спочатку виконайте requestConsent. Повідомлення “Користувач не дав згоди” не друкується, коли disableLogs залишається за замовчуванням (див. “Немає логів у терміналі” нижче), тому термінал не дає вам сигналу в будь-якому випадку, поки ви не зміните цей прапор.
Параметр конструктора disableLogs за замовчуванням встановлений на true. Передайте { disableLogs: false } як другий аргумент до конструктора під час інтеграції, щоб відобразити стан з’єднання та активність запитів у вашому терміналі. Це також найшвидший спосіб відрізнити “не дав згоду” від реальної помилки з’єднання.

Орієнтовний час завершення: 10-15 хвилин. Якщо вам потрібна допомога або у вас є відгуки, зв’яжіться з нами за адресою info@mellowtel.com або приєднуйтеся до нашої спільноти в Discord.