Skip to main content
Integriere Mellowtel in deine plattformübergreifende Electron-Anwendung, damit Benutzer ihre ungenutzte Internetbandbreite im Austausch für Belohnungen oder Premium-Funktionen teilen können. Das Electron SDK läuft überall dort, wo Electron läuft (macOS, Windows und Linux).
Benutzereinwilligung ist obligatorisch. Das SDK funktioniert nur, wenn der Benutzer ausdrücklich zugestimmt hat. init() gibt stillschweigend frühzeitig zurück, wenn keine Einwilligung vorliegt. Wenn du also siehst, dass das SDK ohne Fehler startet, aber nie Daten sendet, ist der wahrscheinlichste Grund, dass der Benutzer noch nicht zugestimmt hat.

Voraussetzungen

  • Ein Mellowtel-Konto und ein Konfigurationsschlüssel (erhalte deinen auf dem Dashboard).
  • Eine Electron-Anwendung mit Zugriff auf den Hauptprozess.

Installation

1. Paket installieren

Installiere das Electron SDK aus dem Stammverzeichnis deines Projekts:

2. In deinen Code einfügen

Importiere das SDK in deiner Electron-Hauptprozessdatei (typischerweise main.ts oder main.js), rufe optional setupMellowtelApp() auf, bevor die App bereit ist, instanziiere Mellowtel mit deinem Konfigurationsschlüssel, fordere die Einwilligung des Benutzers an und rufe dann init() auf, um den Dienst zu starten.
Ersetze YOUR_CONFIGURATION_KEY durch den Schlüssel aus deinem Mellowtel-Dashboard.
Was jeder Aufruf macht:
  • new Mellowtel(configurationKey, options?) instanziiert das SDK. Die einzige derzeit verfügbare Option ist disableLogs, die standardmäßig auf true gesetzt ist. Setze sie auf false, während du integrierst, damit du den Verbindungsstatus und die Anfragenaktivität in deinem Terminal sehen kannst.
  • requestConsent(window, incentive) rendert eine native Electron-Nachricht verankert an das übergebene BrowserWindow. Das zweite Argument ist die prominente Überschrift des Dialogs (zum Beispiel, "Erhalte 3 Monate kostenlos"), die über einer festen Erklärung dessen, was Mellowtel tut, angezeigt wird. Es wird true zurückgegeben, wenn der Benutzer akzeptiert, false, wenn der Benutzer ablehnt oder den Dialog schließt, und undefined, wenn die Einwilligung bereits vorliegt. Das SDK speichert die Opt-in-Entscheidung automatisch, sodass du danach nicht optIn() aufrufen musst.
  • init() wirft nur dann eine Ausnahme, wenn configurationKey leer ist. Wenn der Benutzer nicht zugestimmt hat, wird protokolliert und stillschweigend zurückgegeben. Andernfalls wird eine WebSocket-Verbindung zum Backend von Mellowtel geöffnet. Der Aufruf blockiert nicht die Renderer-UI, sodass Fenster reaktionsfähig bleiben, während die Verbindung hergestellt wird.

Verhindern von Systemdialogunterbrechungen (empfohlen)

Das SDK wird mit einem optionalen Helfer setupMellowtelApp() geliefert, der Electron-Kommandozeilenflags konfiguriert, um Systemdialoge (Autofill-Popups, Übersetzungsleisten, NTLM / Kerberos-Authentifizierungsaufforderungen, Passwortmanager-Integration, Medienüberlagerungen, Erstdialoge) zu unterdrücken, die andernfalls deine Benutzer unterbrechen würden, wenn Mellowtels versteckte Fenster im Hintergrund Anfragen verarbeiten. Rufe es am Anfang deiner Hauptprozessdatei auf, bevor app.whenReady(), und importiere es zusammen mit dem Standardexport von mellowtel-electron. Siehe das upstream README für die kanonische Verwendung.

Benutzereinwilligung

Das Anzeigen eines Einwilligungsdialogs ist obligatorisch. Du musst den Benutzern die Möglichkeit geben, ausdrücklich zuzustimmen, bevor du init() aufrufst, und du musst ihnen eine Möglichkeit bieten, ihren Opt-in-Status jederzeit zu verwalten.
Du hast zwei Möglichkeiten, um mit der Einwilligung umzugehen:
  1. Verwende den eingebauten nativen Dialog über requestConsent(window, incentive). Dies ist der schnellste Weg und wird im obigen Snippet gezeigt. Es rendert einen nativen Electron-dialog.showMessageBox mit deinem Anreiztext als Überschrift und speichert die Entscheidung des Benutzers automatisch.
  2. Erstelle deine eigene Einwilligungs-UI und steuere das SDK über optIn(), optOut() und getOptInStatus(). Verwende dies, wenn du benutzerdefiniertes Branding, reichhaltigere Erklärungen oder Lokalisierung über das hinaus möchtest, was der native Dialog bietet.

Was dein Einwilligungsdialog enthalten muss

1

Erkläre, was Mellowtel macht

Verwende einfache Sprache. Beispiel: “Diese App verwendet Mellowtel, um deine ungenutzte Internetbandbreite zu teilen. Im Gegenzug erhältst du [Vorteil/Funktion]. Du kannst jederzeit in den Einstellungen abmelden.”
2

Gib den Benutzern eine klare Wahl

Füge deutliche Optionen zum Akzeptieren und Ablehnen hinzu.
3

Verlinke zu Richtlinien

Füge Links zu den Nutzungsbedingungen und der Datenschutzrichtlinie hinzu.

Ermögliche Benutzern, ihre Einwilligung später zu ändern

Mellowtel bietet einen eingebauten Einstellungsdialog über showConsentSettings(window). Es rendert einen nativen Dialog mit Opt-In-/Opt-Out-Buttons, die dem aktuellen Status des Benutzers entsprechen, und ruft intern optIn() oder optOut() auf (plus erneute Verbindung des WebSockets bei Opt-In), wenn der Benutzer umschaltet. Verknüpfe es mit einem Menüpunkt oder Einstellungsbutton in deiner App, damit Benutzer ihre Wahl erneut überprüfen können. Wenn du lieber deinen eigenen Einstellungsbildschirm erstellen möchtest, rufe getOptInStatus() auf, um den aktuellen Status zu lesen, und optIn() / optOut(), um ihn zu ändern.

Methodenreferenz

Die Mellowtel-Klasse stellt die folgenden öffentlichen Methoden bereit. Alle sind auf der Instanz verfügbar, die du mit new Mellowtel(configurationKey, options?) erstellt hast. Lebenszyklus
  • init(): Promise<void> startet den Dienst, wenn der Benutzer zugestimmt hat, oder gibt stillschweigend frühzeitig zurück, wenn nicht. Wirft nur, wenn der Konfigurationsschlüssel leer ist.
  • shutdown(): Promise<void> bereinigt SDK-Ressourcen, wenn die Anwendung geschlossen wird. Schließt den WebSocket, zerstört versteckte Arbeitsfenster und löscht Hintergrundtimer. Bewahrt die Opt-in-Präferenz des Benutzers.
  • requestConsent(window: BrowserWindow, incentive: string): Promise<boolean | undefined> zeigt den eingebauten nativen Einwilligungsdialog an und speichert das Ergebnis. Gibt true bei Akzeptieren, false bei Ablehnen oder Schließen, undefined wenn die Einwilligung bereits erteilt wurde, zurück.
  • showConsentSettings(window: BrowserWindow): Promise<void> zeigt den eingebauten Dialog zur Verwaltung der Einwilligung an. Das SDK verwaltet die Opt-In-/Opt-Out-Übergänge intern, wenn der Benutzer seine Wahl ändert.
Manuelle Opt-In-Steuerung
  • optIn(): Promise<void> markiert den Benutzer als zugestimmt, ohne einen Dialog anzuzeigen. Verwende dies nur, nachdem du die Einwilligung über deine eigene UI eingeholt hast.
  • optOut(): Promise<void> markiert den Benutzer als abgemeldet und führt eine vollständige Bereinigung durch (gleiche Ressourcen wie shutdown(), plus Löschen der gespeicherten Einwilligungspräferenz). Es ist nicht erforderlich, danach shutdown() aufzurufen.
  • getOptInStatus(): boolean | undefined gibt den aktuellen Opt-In-Status zurück oder undefined, wenn der Benutzer noch keine Wahl getroffen hat.
  • getNodeId(): string gibt die Mellowtel-Knotenkennung für diese Installation zurück. Nützlich beim Erstellen von Support-Tickets.
Anfragezähler Anfragezähler werden lokal über electron-store gespeichert und überstehen App-Neustarts. Zeige sie in deiner eigenen UI an, wenn du den Benutzern die Auswirkungen ihrer Zustimmung zeigen möchtest.
  • getTotalRequestCount(): number gibt die insgesamt seit der Installation verarbeiteten Anfragen zurück.
  • getDailyRequestCount(): number gibt die Anzahl der heute verarbeiteten Anfragen zurück.
  • getRequestCountForDate(date: string): number gibt die Anzahl für ein bestimmtes YYYY-MM-DD-Datum zurück.
  • getDailyRequestsHistory(): { [date: string]: number } gibt jede tägliche Zählung als Karte zurück.
  • getRequestCountsInRange(startDate: string, endDate: string): { [date: string]: number } gibt Zählungen für einen Datumsbereich zurück.
  • getRequestCounts(): { total: number; daily: number; dailyHistory: { [date: string]: number } } gibt alle drei Zähler in einem Aufruf zurück.

Lebenszyklus und App-Schließung

Nach der Verarbeitung seiner ersten Anfrage kann Mellowtel versteckte Electron-Arbeitsfenster erstellen. Hostanwendungen müssen shutdown() aufrufen, wenn die Anwendung tatsächlich geschlossen wird. shutdown():
  • Schließt die WebSocket-Verbindung.
  • Zerstört versteckte Arbeitsfenster.
  • Löscht Hintergrundtimer und Netzwerkressourcen.
  • Bewahrt die Opt-in-Präferenz des Benutzers.
shutdown() vs optOut(): shutdown() ist eine Bereinigung des Anwendungslebenszyklus — die Einwilligung wird beibehalten. optOut() zieht die Benutzereinwilligung zurück und bereinigt alle Ressourcen. Verwechsle die beiden nicht.

Einzelanwendungsfenster

Rufe shutdown() auf, wenn das Hauptanwendungsfenster geschlossen wird:
Verlasse dich nicht ausschließlich auf das window-all-closed-Ereignis von Electron, da Mellowtels versteckte Arbeitsfenster verhindern können, dass es ausgelöst wird.

Tray-Anwendungen

Rufe shutdown() nicht auf, wenn du das Fenster nur in das System-Tray minimierst. Rufe es aus der expliziten Beenden-Aktion auf:

macOS-Anwendungen

Wenn die Anwendung nach dem Schließen ihrer Fenster aktiv bleibt, rufe shutdown() nur auf, wenn der Benutzer die Anwendung tatsächlich beendet.

Abmelden

optOut() führt bereits eine vollständige Bereinigung durch:
Es ist nicht erforderlich, danach shutdown() aufzurufen. Im Gegensatz zu shutdown() ändert optOut() auch die gespeicherte Einwilligungspräferenz.

Erneutes Starten

Nach shutdown() oder optOut() kann Mellowtel erneut gestartet werden:

Einwilligungsspeicherung

Der Opt-in-Status wird im plattformüblichen electron-store-Konfigurationspfad gespeichert:
  • macOS: ~/Library/Application Support/<YourAppName>/config.json
  • Windows: %APPDATA%\<YourAppName>\config.json
  • Linux: ~/.config/<YourAppName>/config.json
Der Status übersteht App-Updates. Das Deinstallieren deiner App wird ihn nicht automatisch löschen, es sei denn, dein Deinstallationsprogramm entfernt explizit das Konfigurationsverzeichnis der App.

Fehlerbehebung

  1. Stelle sicher, dass du mellowtel-electron installierst (nicht einen gescopten GitHub Packages-Namen).
  2. Leere den npm-Cache und versuche es erneut, indem du npm cache clean --force gefolgt von npm install mellowtel-electron ausführst.
  1. Stelle sicher, dass du requestConsent nachdem app.whenReady() aufgelöst wurde und mit einer gültigen, nicht zerstörten BrowserWindow-Referenz aufrufst.
  2. Wenn du setupMellowtelApp() verwendest, überprüfe, dass es vor app.whenReady() aufgerufen wird, nicht danach.
Dies ist beabsichtigt. init() gibt stillschweigend frühzeitig zurück, wenn der Benutzer nicht zugestimmt hat. Überprüfe getOptInStatus(), um dies zu bestätigen. Wenn es undefined oder false zurückgibt, führe zuerst requestConsent aus. Beachte, dass das interne “Benutzer hat nicht zugestimmt”-Protokoll unterdrückt wird, wenn disableLogs auf seinem Standardwert bleibt (siehe “Protokolle sind still” unten), sodass das Terminal dir kein Signal in die eine oder andere Richtung gibt, bis du dieses Flag umschaltest.
Die disableLogs-Konstruktoroption ist standardmäßig auf true gesetzt. Gib { disableLogs: false } als zweites Argument an den Konstruktor weiter, während du integrierst, um den Verbindungsstatus und die Anfragenaktivität in deinem Terminal sichtbar zu machen. Dies ist auch der schnellste Weg, um eine “nicht zugestimmt”-stille No-Op (siehe oben) von einem echten Verbindungsfehler zu unterscheiden.

Geschätzte Zeit zur Fertigstellung: 10-15 Minuten. Wenn du Hilfe benötigst oder Feedback hast, kontaktiere uns unter info@mellowtel.com oder tritt unserer Discord-Community bei.