Предварительные условия
- Аккаунт Mellowtel и Integration ID из панели управления. Каждое desktop приложение получает уникальный Integration ID.
- .NET 10 SDK
- Windows 10 или Windows 11
- .NET desktop приложение (Console, WPF или Windows Forms)
Хотите увидеть полную, реальную интеграцию перед тем, как внедрить это в свое приложение? Пример mellowtel-pomodoro-windows для WPF показывает полный поток от начала до конца: диалог согласия, переключатель настроек и жизненный цикл в фоновом режиме.
Установка
Mellowtel для Windows доступен на NuGet какMellowtel.Win.
1. Установите пакет
Из директории вашего проекта:PackageReference в ваш .csproj:
2. Добавьте в ваш код
Замените
YOUR_INTEGRATION_ID на Integration ID из вашей панели управления Mellowtel и установите PluginId как стабильный идентификатор для вашего приложения. ShowConsentDialog() — это ваш собственный интерфейс, который возвращает true только когда пользователь явно соглашается. См. Согласие пользователя ниже.Опции конфигурации
MellowtelOptions позволяет настроить несколько параметров:
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
PluginId | string | "mellowtel-win" | Стабильный идентификатор для вашего приложения. Установите что-то уникальное. |
MaxDailyRate | int | Встроенное значение по умолчанию | Максимальное количество запросов, которые SDK будет обрабатывать в день. |
DisableLogs | bool | true | Установите false, чтобы включить логи SDK во время разработки. |
Примеры по типу приложения
- Консольное приложение
- WPF приложение
- Windows Forms
Наблюдение за состоянием подключения
ЭкземплярMellowtel предоставляет событие ConnectionStateChanged, которое срабатывает всякий раз, когда WebSocket к бэкенду Mellowtel подключается или отключается. Примеры для WPF и Windows Forms выше подписываются на это событие, чтобы управлять индикатором состояния. Параметр — это bool, где true означает подключено, а false — отключено.
Событие срабатывает в фоновом потоке, поэтому UI-фреймворки, которые требуют привязки потоков, должны передавать обновления в UI-поток. В WPF используйте Dispatcher.Invoke, а в Windows Forms — Control.Invoke (оба показаны в примерах выше).
О паттерне WPF
async void OnClosing. Пример WPF выше использует protected override async void OnClosing, что является простейшей формой, но имеет тонкую проблему: base.OnClosing(e) вызывается синхронно, пока StopAsync() все еще ожидается, так что окно может закрыться до завершения очистки. Для большинства приложений это нормально, так как процесс сразу же завершает работу. Если вам нужно гарантированное корректное завершение (например, для сброса телеметрии), следуйте документированному Microsoft паттерну отложенного выполнения, где вы устанавливаете e.Cancel = true, await для вашей асинхронной работы, а затем явно закрываете окно.Согласие пользователя
Что должно включать ваше диалоговое окно согласия
Объясните, что делает Mellowtel
Используйте простой язык. Пример: “Это приложение использует Mellowtel для обмена вашей неиспользованной интернет-полосой. Это позволяет вам [выгода/функция]. Вы можете отказаться в любое время в настройках.”
Ссылка на политику
Включите ссылки на Условия использования и Политику конфиденциальности.
Позвольте пользователям изменить свое согласие в настройках
GetOptInDetails() возвращает статус согласия вместе с временными метками согласия и отказа:
Устранение неполадок
Ошибка "Пакет не найден"
Ошибка "Пакет не найден"
- Убедитесь, что ваш проект нацелен на .NET 10 или выше.
Mellowtel.Winтребуетnet10.0. - Очистите кеш NuGet и восстановите:
Ошибка "InvalidOperationException: Пользователь не дал согласие"
Ошибка "InvalidOperationException: Пользователь не дал согласие"
StartAsync() требует явного согласия. Вызовите OptIn() после того, как ваш диалог согласия вернет положительный результат, затем вызовите StartAsync(). Для тихого возобновления при последующих запусках используйте StartIfOptedInAsync(), который не выполняется, если пользователь не дал согласие.Оценочное время выполнения: 10-15 минут. Если вам нужна помощь или у вас есть отзывы, свяжитесь с нами по адресу info@mellowtel.com или присоединяйтесь к нашему сообществу в Discord.