Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.mellowtel.com/llms.txt

Use this file to discover all available pages before exploring further.

Integreer Mellowtel in je Windows desktop applicatie om gebruikers in staat te stellen hun ongebruikte internetbandbreedte te delen in ruil voor beloningen of premium functies.
Gebruikersinstemming is verplicht. De SDK gooit een InvalidOperationException als je StartAsync() aanroept zonder dat de gebruiker heeft ingestemd.

Vereisten

  • Een Mellowtel-account en Integratie-ID van het dashboard. Elke desktop app krijgt zijn eigen unieke Integratie-ID.
  • .NET 10 SDK
  • Windows 10 of Windows 11
  • Een .NET desktop applicatie (Console, WPF of Windows Forms)
Wil je een complete, real-world integratie zien voordat je dit in je eigen app verwerkt? De mellowtel-pomodoro-windows WPF-sample toont de volledige flow van begin tot eind: instemmingsdialoog, instellingen toggle, en achtergrond levenscyclus.

Installatie

Mellowtel voor Windows wordt geleverd via NuGet als Mellowtel.Win.

1. Installeer het pakket

Vanuit je projectdirectory:
dotnet add package Mellowtel.Win
Of voeg een PackageReference toe aan je .csproj:
<PackageReference Include="Mellowtel.Win" Version="1.0.0" />

2. Voeg toe aan je code

using MellowtelWin;

// Initialiseer Mellowtel met je Integratie-ID
var mellowtel = new Mellowtel("YOUR_INTEGRATION_ID", new MellowtelOptions
{
    PluginId = "your-app-id"
});

// Als de gebruiker al heeft ingestemd, hervat dan stilletjes.
// Zo niet, dan is dit een no-op en retourneert false.
await mellowtel.StartIfOptedInAsync();

// Eerste keer flow: toon je instemmings-UI, stem dan in en start.
if (!mellowtel.GetOptInStatus() && ShowConsentDialog())
{
    mellowtel.OptIn();
    await mellowtel.StartAsync();
}

// Bij afsluiten van de app
await mellowtel.StopAsync();
mellowtel.Dispose();
Vervang YOUR_INTEGRATION_ID door de Integratie-ID van je Mellowtel-dashboard, en stel PluginId in op een stabiele identificatie voor je app. ShowConsentDialog() is je eigen UI die alleen true retourneert wanneer de gebruiker expliciet akkoord gaat. Zie Gebruikersinstemming hieronder.

Configuratie-opties

MellowtelOptions laat je een paar dingen afstemmen:
EigenschapTypeStandaardBeschrijving
PluginIdstring"mellowtel-win"Stabiele identificatie voor je app. Stel dit in op iets unieks.
MaxDailyRateintIngebouwde standaardMaximaal aantal verzoeken dat de SDK per dag zal verwerken.
DisableLogsbooltrueStel in op false om SDK-logs in te schakelen tijdens ontwikkeling.

Voorbeelden per applicatietype

using MellowtelWin;

class Program
{
    static async Task Main(string[] args)
    {
        using var mellowtel = new Mellowtel("YOUR_INTEGRATION_ID", new MellowtelOptions
        {
            PluginId = "your-app-id"
        });

        if (!mellowtel.GetOptInStatus())
        {
            Console.WriteLine("Gebruiker moet instemmen voordat deze service kan worden gebruikt.");
            return;
        }

        using var cts = new CancellationTokenSource();
        Console.CancelKeyPress += (s, e) => { e.Cancel = true; cts.Cancel(); };

        try
        {
            await mellowtel.StartAsync(cts.Token);
            Console.WriteLine("Mellowtel draait. Druk op Ctrl+C om te stoppen.");
            await Task.Delay(Timeout.Infinite, cts.Token);
        }
        catch (InvalidOperationException ex)
        {
            Console.WriteLine($"Kan niet starten: {ex.Message}");
        }
        catch (OperationCanceledException)
        {
            Console.WriteLine("Stoppen...");
        }
        finally
        {
            await mellowtel.StopAsync();
        }
    }
}

Verbindingstoestand observeren

De Mellowtel instantie biedt een ConnectionStateChanged evenement dat wordt geactiveerd wanneer de onderliggende WebSocket naar Mellowtel’s backend verbindt of verbreekt. De WPF en Windows Forms voorbeelden hierboven abonneren zich hierop om een statusindicator aan te sturen. De payload is een bool waarbij true betekent verbonden en false betekent niet verbonden. Het evenement wordt op een achtergrondthread geactiveerd, dus UI-frameworks die thread-affiniteit afdwingen moeten updates naar de UI-thread marshallen. In WPF gebruik je Dispatcher.Invoke, en in Windows Forms gebruik je Control.Invoke (beide getoond in de voorbeelden hierboven).
Over het WPF async void OnClosing patroon. Het WPF voorbeeld hierboven gebruikt protected override async void OnClosing, wat de eenvoudigste vorm is maar een subtiel probleem heeft: base.OnClosing(e) wordt synchroon aangeroepen terwijl StopAsync() nog aan het wachten is, zodat het venster kan sluiten voordat de opruiming is voltooid. Voor de meeste apps is dit prima omdat het proces onmiddellijk daarna afsluit. Als je een gegarandeerde nette afsluiting nodig hebt (bijvoorbeeld om telemetrie te flushen), volg dan het door Microsoft gedocumenteerde deferral patroon waarbij je e.Cancel = true instelt, je async werk afwacht, en dan het venster expliciet sluit.

Gebruikersinstemming

Het tonen van een instemmingsdialoog is verplicht. De SDK dwingt dit af: StartAsync() gooit een InvalidOperationException als de gebruiker niet heeft ingestemd.
var mellowtel = new Mellowtel("YOUR_INTEGRATION_ID", new MellowtelOptions
{
    PluginId = "your-app-id"
});

if (!mellowtel.GetOptInStatus())
{
    var userAgreed = ShowConsentDialog(); // je eigen dialoog

    if (userAgreed)
        mellowtel.OptIn();
    else
        return; // gebruiker weigerde, niet starten
}

try
{
    await mellowtel.StartAsync();
}
catch (InvalidOperationException ex)
{
    Console.WriteLine($"Fout: {ex.Message}");
}

Wat je instemmingsdialoog moet bevatten

1

Leg uit wat Mellowtel doet

Gebruik eenvoudige taal. Voorbeeld: “Deze app gebruikt Mellowtel om je ongebruikte internetbandbreedte te delen. Dit stelt je in staat om te [voordeel/functie]. Je kunt op elk moment afmelden in de instellingen.”
2

Geef gebruikers een duidelijke keuze

Voeg duidelijke opties voor Accepteren en Weigeren toe.
3

Link naar beleid

Voeg links toe naar de Servicevoorwaarden en Privacybeleid.

Laat gebruikers hun instemming wijzigen in de instellingen

// Controleer huidige status
bool isOptedIn = mellowtel.GetOptInStatus();

// Afmelden
if (userWantsToOptOut)
{
    mellowtel.OptOut();
    await mellowtel.StopAsync();
}

// Opnieuw aanmelden
if (userWantsToOptIn)
{
    mellowtel.OptIn();
    await mellowtel.StartAsync();
}
Voor rijkere UI (bijvoorbeeld, tonen wanneer de gebruiker voor het eerst instemde), retourneert GetOptInDetails() de instemmingsstatus samen met de instemmings- en afmeldingsdatums:
var (isOptedIn, optInDate, optOutDate) = mellowtel.GetOptInDetails();

Problemen oplossen

  1. Zorg ervoor dat je project .NET 10 of later target. Mellowtel.Win vereist net10.0.
  2. Wis de NuGet cache en herstel:
dotnet nuget locals all --clear
dotnet restore
StartAsync() vereist expliciete instemming. Roep OptIn() aan nadat je instemmingsdialoog een positief resultaat retourneert, en roep dan StartAsync() aan. Voor stille hervatting bij volgende starts, gebruik StartIfOptedInAsync() in plaats daarvan, wat een no-op is wanneer de gebruiker niet heeft ingestemd.

Geschatte tijd om te voltooien: 10-15 minuten. Als je hulp nodig hebt of feedback hebt, neem contact met ons op via info@mellowtel.com of sluit je aan bij onze Discord community.