Skip to main content
Integreer Mellowtel in je cross-platform Electron-applicatie om gebruikers hun ongebruikte internetbandbreedte te laten delen in ruil voor beloningen of premium functies. De Electron SDK werkt overal waar Electron werkt (macOS, Windows en Linux).
Gebruikerstoestemming is verplicht. De SDK werkt alleen wanneer de gebruiker expliciet heeft ingestemd. init() retourneert stilletjes vroegtijdig wanneer er geen toestemming is, dus als je ziet dat de SDK start zonder fouten maar nooit verkeer verzendt, is de meest waarschijnlijke reden dat de gebruiker nog niet heeft ingestemd.

Vereisten

  • Een Mellowtel-account en configuratiesleutel (verkrijg deze via het dashboard).
  • Een Electron-applicatie met toegang tot het hoofdproces.

Installatie

1. Installeer het pakket

Installeer de Electron SDK vanuit de root van je project:

2. Voeg toe aan je code

In je Electron-hoofdprocesbestand (meestal main.ts of main.js), importeer de SDK, roep optioneel setupMellowtelApp() aan voordat de app klaar is, installeer Mellowtel met je configuratiesleutel, vraag toestemming van de gebruiker en roep vervolgens init() aan om de service te starten.
Vervang YOUR_CONFIGURATION_KEY door de sleutel van je Mellowtel-dashboard.
Wat elke oproep doet:
  • new Mellowtel(configurationKey, options?) installeert de SDK. De enige beschikbare optie vandaag is disableLogs, die standaard op true staat. Zet het op false tijdens de integratie zodat je de verbindingsstatus en aanvraagactiviteit in je terminal kunt zien.
  • requestConsent(window, incentive) rendert een native Electron-berichtvenster gekoppeld aan de BrowserWindow die je doorgeeft. Het tweede argument is de prominente kop van de dialoog (bijvoorbeeld, "3 maanden gratis"), getoond boven een vaste uitleg van wat Mellowtel doet. Het lost op naar true als de gebruiker accepteert, false als de gebruiker weigert of de dialoog sluit, en undefined als toestemming al op bestand is. De SDK bewaart automatisch de opt-in beslissing, dus je hoeft niet optIn() daarna aan te roepen.
  • init() gooit alleen een fout wanneer configurationKey leeg is. Als de gebruiker niet heeft ingestemd, logt het en retourneert het stilletjes. Anders opent het een WebSocket naar Mellowtel’s backend. De oproep is niet-blokkerend voor renderer UI, dus vensters blijven responsief terwijl de verbinding wordt opgezet.

Voorkomen van systeemdialoogonderbrekingen (aanbevolen)

De SDK wordt geleverd met een optionele helper, setupMellowtelApp(), die Electron command-line vlaggen configureert om systeemdialogen te onderdrukken (autofill pop-ups, vertaalbalken, NTLM / Kerberos auth prompts, wachtwoordbeheerintegratie, media-overlays, eerste-run dialogen) die anders je gebruikers zouden onderbreken wanneer Mellowtel’s verborgen vensterprocessen verzoeken op de achtergrond verwerken. Roep het aan bovenaan je hoofdprocesbestand, voor app.whenReady(), en importeer het samen met de standaardexport van mellowtel-electron. Zie de upstream README voor het canonieke gebruik.

Gebruikerstoestemming

Het weergeven van een toestemmingsdialoog is verplicht. Je moet gebruikers expliciet laten instemmen voordat je init() aanroept, en je moet een manier bieden voor hen om hun opt-in status op elk moment te beheren.
Je hebt twee wegen voor het afhandelen van toestemming:
  1. Gebruik de ingebouwde native dialoog via requestConsent(window, incentive). Dit is de snelste weg en is wat de snippet hierboven laat zien. Het rendert een native Electron dialog.showMessageBox met je incentive-tekst als de kop en bewaart automatisch de beslissing van de gebruiker.
  2. Bouw je eigen toestemmings-UI en stuur de SDK aan via optIn(), optOut(), en getOptInStatus(). Gebruik dit als je aangepaste branding, rijkere uitleg of lokalisatie wilt die verder gaat dan wat de native dialoog biedt.

Wat je toestemmingsdialoog moet bevatten

1

Leg uit wat Mellowtel doet

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

Geef gebruikers een duidelijke keuze

Voeg duidelijke Accepteer en Weiger opties toe.
3

Link naar beleid

Voeg links toe naar de Servicevoorwaarden en Privacybeleid.

Laat gebruikers later hun toestemming wijzigen

Mellowtel biedt een ingebouwde instellingen dialoog via showConsentSettings(window). Het rendert een native dialoog met Opt In / Opt Out knoppen die overeenkomen met de huidige status van de gebruiker, en roept intern optIn() of optOut() aan (plus het opnieuw verbinden van de WebSocket bij opt-in) wanneer de gebruiker schakelt. Koppel het aan een menu-item of instellingenknop in je app zodat gebruikers hun keuze opnieuw kunnen bekijken. Als je liever je eigen instellingen scherm bouwt, roep getOptInStatus() aan om de huidige status te lezen en optIn() / optOut() om deze te wijzigen.

Methode Referentie

De Mellowtel klasse stelt de volgende openbare methoden bloot. Alle zijn beschikbaar op de instantie die je hebt gemaakt met new Mellowtel(configurationKey, options?). Levenscyclus
  • init(): Promise<void> start de service als de gebruiker heeft ingestemd, of retourneert stilletjes vroegtijdig als dat niet het geval is. Gooit alleen een fout wanneer de configuratiesleutel leeg is.
  • shutdown(): Promise<void> ruimt SDK-bronnen op wanneer de applicatie sluit. Sluit de WebSocket, vernietigt verborgen werkervensters en wist achtergrondtimers. Behoudt de opt-in voorkeur van de gebruiker.
  • requestConsent(window: BrowserWindow, incentive: string): Promise<boolean | undefined> toont de ingebouwde native toestemmingsdialoog en bewaart het resultaat. Retourneert true bij acceptatie, false bij weigering of sluiten, undefined als toestemming al was gegeven.
  • showConsentSettings(window: BrowserWindow): Promise<void> toont de ingebouwde beheer-toestemming dialoog. De SDK behandelt de opt-in / opt-out overgangen intern wanneer de gebruiker zijn keuze wijzigt.
Handmatige opt-in controle
  • optIn(): Promise<void> markeert de gebruiker als ingestemd zonder een dialoog te tonen. Gebruik dit alleen nadat je toestemming hebt verzameld via je eigen UI.
  • optOut(): Promise<void> markeert de gebruiker als afgemeld en voert volledige opruiming uit (dezelfde bronnen als shutdown(), plus het wissen van de opgeslagen toestemmingsvoorkeur). Er is geen noodzaak om shutdown() daarna aan te roepen.
  • getOptInStatus(): boolean | undefined retourneert de huidige opt-in status, of undefined als de gebruiker nooit een keuze heeft gemaakt.
  • getNodeId(): string retourneert de Mellowtel knooppuntidentificatie voor deze installatie. Handig bij het indienen van supporttickets.
Aanvraagcounters Aanvraagcounters worden lokaal opgeslagen via electron-store en overleven app-herstarts. Toon ze in je eigen UI als je gebruikers de impact van hun opt-in wilt laten zien.
  • getTotalRequestCount(): number retourneert het totale aantal verwerkte aanvragen sinds installatie.
  • getDailyRequestCount(): number retourneert het aantal verwerkte aanvragen vandaag.
  • getRequestCountForDate(date: string): number retourneert het aantal voor een specifieke YYYY-MM-DD datum.
  • getDailyRequestsHistory(): { [date: string]: number } retourneert elke dagelijkse telling als een map.
  • getRequestCountsInRange(startDate: string, endDate: string): { [date: string]: number } retourneert tellingen voor een datumbereik.
  • getRequestCounts(): { total: number; daily: number; dailyHistory: { [date: string]: number } } retourneert alle drie de counters in één oproep.

Levenscyclus en app-afsluiting

Na het verwerken van zijn eerste aanvraag kan Mellowtel verborgen Electron werkervensters creëren. Hostapplicaties moeten shutdown() aanroepen wanneer de applicatie daadwerkelijk sluit. shutdown():
  • Sluit de WebSocket-verbinding.
  • Vernietigt verborgen werkervensters.
  • Wist achtergrondtimers en netwerkbronnen.
  • Behoudt de opt-in voorkeur van de gebruiker.
shutdown() versus optOut(): shutdown() is applicatielevenscyclus opruiming — toestemming wordt behouden. optOut() trekt de toestemming van de gebruiker in en ruimt alle bronnen op. Verwissel de twee niet.

Enkel-venster applicaties

Roep shutdown() aan wanneer het hoofdapplicatievenster sluit:
Vertrouw niet alleen op Electron’s window-all-closed evenement omdat Mellowtel’s verborgen werkervensters kunnen voorkomen dat het wordt geactiveerd.

Systeemvak applicaties

Roep shutdown() niet aan wanneer je het venster alleen naar het systeemvak verbergt. Roep het aan vanuit de expliciete Afsluiten-actie:

macOS applicaties

Als de applicatie actief blijft nadat de vensters zijn gesloten, roep shutdown() alleen aan wanneer de gebruiker de applicatie daadwerkelijk afsluit.

Afmelden

optOut() voert al volledige opruiming uit:
Er is geen noodzaak om shutdown() daarna aan te roepen. In tegenstelling tot shutdown(), verandert optOut() ook de opgeslagen toestemmingsvoorkeur.

Opnieuw starten

Na shutdown() of optOut(), kan Mellowtel opnieuw worden gestart:

Toestemming Persistentie

De opt-in status wordt opgeslagen in het platform-standaard electron-store configuratiepad:
  • macOS: ~/Library/Application Support/<YourAppName>/config.json
  • Windows: %APPDATA%\<YourAppName>\config.json
  • Linux: ~/.config/<YourAppName>/config.json
De status overleeft app-updates. Het verwijderen van je app zal het niet automatisch wissen, tenzij je uninstaller expliciet de configuratiemap van de app verwijdert.

Probleemoplossing

  1. Bevestig dat je mellowtel-electron installeert (niet een gescopeerde GitHub Packages naam).
  2. Wis de npm-cache en probeer opnieuw door npm cache clean --force te draaien gevolgd door npm install mellowtel-electron.
  1. Zorg ervoor dat je requestConsent na app.whenReady() aanroept en met een geldige, niet-vernietigde BrowserWindow referentie.
  2. Als je setupMellowtelApp() gebruikt, controleer dan of het voor app.whenReady() wordt aangeroepen, niet erna.
Dit is met opzet. init() retourneert stilletjes vroegtijdig wanneer de gebruiker niet heeft ingestemd. Controleer getOptInStatus() om te bevestigen. Als het undefined of false retourneert, voer dan eerst requestConsent uit. Merk op dat de interne “User is not opted in” log wordt onderdrukt wanneer disableLogs op zijn standaard blijft (zie “Logs zijn stil” hieronder), dus de terminal geeft je geen signaal in beide gevallen totdat je die vlag omdraait.
De disableLogs constructoroptie staat standaard op true. Geef { disableLogs: false } als het tweede argument aan de constructor tijdens de integratie om de verbindingsstatus en aanvraagactiviteit in je terminal te tonen. Dit is ook de snelste manier om een “niet ingestemd” stille no-op (zie hierboven) te onderscheiden van een echte verbindingsfout.

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-gemeenschap.