Предварительные требования
- Учетная запись Mellowtel и ключ конфигурации (получите его на панели управления).
- Приложение на Electron с доступом к основному процессу.
Установка
1. Настройка аутентификации npm
Создайте файл.npmrc в корневом каталоге вашего проекта, чтобы указать npm на реестр пакетов Mellowtel GitHub и аутентифицировать установку:
YOUR_NPM_TOKEN на токен установки ниже. Нажмите, чтобы показать, затем используйте значок копирования на блоке кода, чтобы скопировать его в буфер обмена.
Показать токен установки
Показать токен установки
2. Установите пакет
Из корня вашего проекта установите SDK для Electron:3. Добавьте в ваш код
В вашем основном файле процесса Electron (обычноmain.ts или main.js), импортируйте SDK, создайте его экземпляр с вашим ключом конфигурации, запросите согласие у пользователя, а затем вызовите 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пуст. Если пользователь не дал согласие, он записывает лог и возвращается тихо. В противном случае он открывает WebSocket к бэкенду Mellowtel. Вызов не блокирует UI рендерера, поэтому окна остаются отзывчивыми, пока устанавливается соединение.
Предотвращение системных диалогов (рекомендуется)
SDK поставляется с дополнительным помощником,setupMellowtelApp(), который настраивает флаги командной строки Electron, чтобы подавлять системные диалоги (всплывающие окна автозаполнения, панели перевода, запросы NTLM / Kerberos аутентификации, интеграцию с менеджером паролей, медиа-оверлеи, диалоги первого запуска), которые в противном случае прерывали бы ваших пользователей, когда скрытые окна Mellowtel обрабатывают запросы в фоновом режиме.
Вызовите его в начале вашего основного файла процесса, до app.whenReady(), и импортируйте его вместе с экспортом по умолчанию из @mellowtel-inc/mellowtel-electron. См. основной 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 обрабатывает переходы между состояниями согласия внутренне, когда пользователь переключает свой выбор.
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 } в качестве второго аргумента конструктору во время интеграции, чтобы отобразить состояние соединения и активность запросов в вашем терминале. Это также самый быстрый способ отличить “не дал согласие” тихий no-op (см. выше) от реальной ошибки соединения.Оценочное время завершения: 10-15 минут. Если вам нужна помощь или у вас есть отзывы, свяжитесь с нами по адресу info@mellowtel.com или присоединяйтесь к нашему сообществу в Discord.