Skip to main content
Integre o Mellowtel no seu aplicativo desktop Windows para permitir que os usuários compartilhem sua largura de banda de internet não utilizada em troca de recompensas ou recursos premium.
O consentimento do usuário é obrigatório. O SDK lança uma InvalidOperationException se você chamar StartAsync() sem que o usuário tenha optado por participar.

Pré-requisitos

  • Uma conta Mellowtel e ID de Integração do painel de controle. Cada aplicativo desktop recebe seu próprio ID de Integração único.
  • SDK do .NET 10
  • Windows 10 ou Windows 11
  • Um aplicativo desktop .NET (Console, WPF ou Windows Forms)
Quer ver uma integração completa e real antes de implementar no seu próprio aplicativo? O exemplo WPF mellowtel-pomodoro-windows mostra o fluxo completo de ponta a ponta: diálogo de consentimento, alternância de configurações e ciclo de vida em segundo plano.

Instalação

O Mellowtel para Windows é distribuído no NuGet como Mellowtel.Win.

1. Instale o Pacote

Do diretório do seu projeto:
Ou adicione um PackageReference ao seu .csproj:

2. Adicione ao Seu Código

Substitua YOUR_INTEGRATION_ID pelo ID de Integração do seu painel Mellowtel e defina PluginId como um identificador estável para seu aplicativo. ShowConsentDialog() é sua própria interface que retorna true apenas quando o usuário concorda explicitamente. Veja Consentimento do Usuário abaixo.

Opções de configuração

MellowtelOptions permite ajustar algumas coisas:
PropriedadeTipoPadrãoDescrição
PluginIdstring"mellowtel-win"Identificador estável para seu aplicativo. Defina isso como algo único.
MaxDailyRateintPadrão embutidoMáximo de solicitações que o SDK irá lidar por dia.
DisableLogsbooltrueDefina como false para habilitar logs do SDK durante o desenvolvimento.

Exemplos por Tipo de Aplicação

Observando o estado da conexão

A instância Mellowtel expõe um evento ConnectionStateChanged que é acionado sempre que o WebSocket subjacente para o backend do Mellowtel se conecta ou desconecta. Os exemplos de WPF e Windows Forms acima se inscrevem nele para acionar um indicador de status. A carga útil é um bool onde true significa conectado e false significa desconectado. O evento é acionado em uma thread de segundo plano, então frameworks de UI que impõem afinidade de thread devem transferir atualizações para a thread de UI. No WPF use Dispatcher.Invoke, e no Windows Forms use Control.Invoke (ambos mostrados nos exemplos acima).
Sobre o padrão WPF async void OnClosing. O exemplo WPF acima usa protected override async void OnClosing, que é a forma mais simples, mas tem um problema sutil: base.OnClosing(e) é chamado de forma síncrona enquanto StopAsync() ainda está aguardando, então a janela pode fechar antes que a limpeza termine. Para a maioria dos aplicativos isso é aceitável porque o processo sai imediatamente depois. Se você precisar de um encerramento gracioso garantido (por exemplo, para enviar telemetria), siga o padrão de adiamento documentado pela Microsoft onde você define e.Cancel = true, await seu trabalho assíncrono, e então fecha a janela explicitamente.

Consentimento do Usuário

Exibir um diálogo de consentimento é obrigatório. O SDK impõe isso: StartAsync() lança uma InvalidOperationException se o usuário não tiver optado por participar.

O que seu diálogo de consentimento deve incluir

1

Explique o que o Mellowtel faz

Use linguagem simples. Exemplo: “Este aplicativo usa o Mellowtel para compartilhar sua largura de banda de internet não utilizada. Isso permite que você [benefício/recurso]. Você pode optar por sair a qualquer momento nas configurações.”
2

Dê aos usuários uma escolha clara

Inclua opções distintas de Aceitar e Recusar.
3

Link para políticas

Permitir que os usuários alterem seu consentimento nas configurações

Para uma interface mais rica (por exemplo, mostrando quando o usuário optou por participar pela primeira vez), GetOptInDetails() retorna o status de opt-in junto com as datas de opt-in e opt-out:

Solução de Problemas

  1. Certifique-se de que seu projeto tem como alvo .NET 10 ou posterior. Mellowtel.Win requer net10.0.
  2. Limpe o cache do NuGet e restaure:
StartAsync() requer consentimento explícito. Chame OptIn() após seu diálogo de consentimento retornar um resultado positivo, então chame StartAsync(). Para retomar silenciosamente em lançamentos subsequentes, use StartIfOptedInAsync() em vez disso, que não faz nada quando o usuário não optou por participar.

Tempo estimado para conclusão: 10-15 minutos. Se precisar de ajuda ou tiver feedback, entre em contato conosco em info@mellowtel.com ou junte-se à nossa comunidade no Discord.