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 als de gebruiker expliciet heeft ingestemd. init() retourneert zonder te starten wanneer er geen toestemming is, dus als je ziet dat de SDK start zonder fouten maar nooit aanvragen verwerkt, 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

Importeer de SDK in je Electron-hoofdprocesbestand (meestal main.ts of main.js), roep optioneel setupMellowtelApp() aan voordat de app klaar is, instantieer Mellowtel met je configuratiesleutel, vraag toestemming aan de gebruiker en roep vervolgens init() aan om de service te starten.
Vervang YOUR_CONFIGURATION_KEY door de sleutel uit 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 het integreren zodat je de verbindingsstatus en aanvraagactiviteit in je terminal kunt zien.
  • requestConsent(window, incentive) toont een native Electron-berichtvenster gekoppeld aan de BrowserWindow die je doorgeeft. Het tweede argument is de prominente kop van de dialoog (bijvoorbeeld, "Krijg 3 maanden gratis"), weergegeven boven een vaste uitleg van wat Mellowtel doet. Het resulteert in true als de gebruiker accepteert, false als de gebruiker weigert of de dialoog sluit, en undefined als toestemming al is gegeven. De SDK bewaart de opt-in beslissing automatisch, dus je hoeft daarna niet optIn() aan te roepen.
  • init() gooit alleen een fout als configurationKey leeg is. Als de gebruiker niet heeft ingestemd, logt het en retourneert zonder te starten. Anders verbindt het met Mellowtel zodat het aanvragen kan verwerken. De oproep is niet-blokkerend voor de renderer UI, dus vensters blijven responsief terwijl de verbinding wordt gemaakt.

Optioneel: onverwachte OS-prompts verminderen

De SDK wordt geleverd met een optionele helper, setupMellowtelApp(), die onverwachte OS-prompts (autofill-popups, vertaalbalken, media-overlays, eerste-run-dialogen) tijdens achtergrondverzoeken vermindert. Deze vlaggen gelden voor het hele Electron-proces, niet alleen voor Mellowtel. Sla de helper over als je product afhankelijk is van native authenticatieprompts of wachtwoordbeheerder UI. Roep het aan bovenaan je hoofdprocesbestand, voor app.whenReady(), en importeer het naast de standaardexport van mellowtel-electron. Zie de upstream README voor het canonieke gebruik.

Gebruikerstoestemming

Het tonen 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 opties voor het afhandelen van toestemming:
  1. Gebruik de ingebouwde native dialoog via requestConsent(window, incentive). Dit is de snelste weg en is wat de bovenstaande snippet laat zien. Het toont een native Electron dialog.showMessageBox met je incentive-tekst als de kop en bewaart de beslissing van de gebruiker automatisch.
  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 uitschrijven in de instellingen.”
2

Geef gebruikers een duidelijke keuze

Voeg duidelijke opties voor Accepteren en Weigeren toe.
3

Link naar beleidsregels

Voeg links toe naar de Algemene Voorwaarden en Privacybeleid.

Laat gebruikers later hun toestemming wijzigen

Mellowtel biedt een ingebouwde instellingen dialoog via showConsentSettings(window). Het toont 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 opnieuw verbinden met Mellowtel bij opt-in) wanneer de gebruiker schakelt. Koppel het aan een menu-item of instellingsknop in je app zodat gebruikers hun keuze kunnen herzien. 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 biedt de volgende openbare methoden. Ze zijn allemaal 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 zonder te starten als dat niet het geval is. Gooi alleen een fout als de configuratiesleutel leeg is.
  • shutdown(): Promise<void> ruimt SDK-bronnen op wanneer de applicatie sluit. Sluit de verbinding met Mellowtel, geeft geïsoleerde aanvraagvensters vrij 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-toestemmingsdialoog. De SDK behandelt de opt-in / opt-out overgangen intern wanneer de gebruiker hun 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 uitgeschreven 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 nog nooit een keuze heeft gemaakt.
  • getNodeId(): string retourneert de Mellowtel-knoopidentificatie 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 de eerste aanvraag kan de SDK geïsoleerde, offscreen BrowserWindows behouden voor achtergrondwerk. Deze vensters hebben geen toegang tot de sessie van de gebruiker of de gegevens van je app. Hostapplicaties moeten shutdown() aanroepen wanneer de applicatie daadwerkelijk sluit zodat die werkers worden vrijgegeven. shutdown():
  • Sluit de verbinding met Mellowtel.
  • Geeft geïsoleerde aanvraagvensters vrij.
  • Wist achtergrondtimers.
  • Behoudt de opt-in voorkeur van de gebruiker.
shutdown() vs optOut(): shutdown() wordt uitgevoerd wanneer de app sluit — de opt-in van de gebruiker blijft behouden. optOut() is wanneer de gebruiker van gedachten verandert — toestemming wordt ingetrokken en de SDK stopt.

Enkelvenster applicaties

Roep shutdown() aan wanneer het hoofdapplicatievenster sluit:
Vertrouw niet alleen op het window-all-closed evenement van Electron. Achtergrondwerkers kunnen voorkomen dat het wordt geactiveerd, dus behandel een expliciete afsluiting (of de hierboven genoemde closed handler van het hoofdvenster) als het signaal om shutdown() aan te roepen.

Systeemvak applicaties

Roep shutdown() niet aan wanneer het venster alleen naar het systeemvak is geminimaliseerd. Roep het aan vanuit de expliciete Afsluitactie:

macOS applicaties

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

Uitschrijven

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

Opt-in wordt opgeslagen in de normale Electron-configuratie van je app (dezelfde electron-store locatie als andere app-instellingen):
  • macOS: ~/Library/Application Support/<YourAppName>/config.json
  • Windows: %APPDATA%\<YourAppName>\config.json
  • Linux: ~/.config/<YourAppName>/config.json
De keuze overleeft app-updates. Als een gebruiker de app verwijdert en later opnieuw installeert zonder die map te verwijderen, kan de vorige keuze er nog steeds zijn — standaard desktopgedrag, niet iets dat Mellowtel zelf bijhoudt.

Probleemoplossing

  1. Controleer of 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 BrowserWindow die nog open is.
  2. Als je setupMellowtelApp() gebruikt, controleer of het voor app.whenReady() wordt aangeroepen, niet erna.
Dit is opzettelijk. init() retourneert zonder te starten wanneer de gebruiker niet heeft ingestemd. Controleer getOptInStatus() om te bevestigen. Als het undefined of false retourneert, voer dan eerst requestConsent uit. Het bericht “Gebruiker is niet ingestemd” wordt niet afgedrukt wanneer disableLogs op zijn standaard blijft (zie “Geen logs in de terminal” 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 het integreren om verbindingsstatus en aanvraagactiviteit in je terminal zichtbaar te maken. Dit is ook de snelste manier om een “niet ingestemd” 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 dan contact met ons op via info@mellowtel.com of sluit je aan bij onze Discord-community.