Prerequisiti
- Un account Mellowtel e una chiave di configurazione (ottieni la tua dalla dashboard).
- Un’applicazione Electron con accesso al processo principale.
Installazione
1. Configura l’Autenticazione npm
Crea un file.npmrc nella directory principale del tuo progetto per indirizzare npm al registro dei pacchetti GitHub di Mellowtel e autenticare l’installazione:
YOUR_NPM_TOKEN con il token di installazione qui sotto. Clicca per rivelarlo, quindi usa l’icona di copia sul blocco di codice per copiarlo negli appunti.
Rivela il token di installazione
Rivela il token di installazione
2. Installa il Pacchetto
Dalla radice del tuo progetto, installa l’SDK Electron:3. Aggiungi al Tuo Codice
Nel file del processo principale di Electron (tipicamentemain.ts o main.js), importa l’SDK, istanzialo con la tua chiave di configurazione, richiedi il consenso dall’utente, e poi chiama init() per avviare il servizio.
Sostituisci
YOUR_CONFIGURATION_KEY con la chiave dal tuo dashboard Mellowtel.new Mellowtel(configurationKey, options?)istanzia l’SDK. L’unica opzione disponibile oggi èdisableLogs, che di default ètrue. Impostalo sufalsedurante l’integrazione per vedere lo stato della connessione e l’attività delle richieste nel tuo terminale.requestConsent(window, incentive)rende una finestra di messaggio nativa di Electron ancorata alBrowserWindowche passi. Il secondo argomento è il titolo prominente del dialogo (ad esempio,"Ottieni 3 mesi gratis"), mostrato sopra una spiegazione fissa di cosa fa Mellowtel. Risolve atruese l’utente accetta,falsese l’utente rifiuta o chiude il dialogo, eundefinedse il consenso è già registrato. L’SDK persiste automaticamente la decisione di opt-in, quindi non è necessario chiamareoptIn()successivamente.init()lancia un’eccezione solo quandoconfigurationKeyè vuoto. Se l’utente non ha acconsentito, registra e ritorna silenziosamente. Altrimenti apre un WebSocket al backend di Mellowtel. La chiamata non blocca l’interfaccia utente del renderer, quindi le finestre rimangono reattive mentre la connessione viene stabilita.
Prevenire interruzioni da dialoghi di sistema (consigliato)
L’SDK viene fornito con un helper opzionale,setupMellowtelApp(), che configura i flag della riga di comando di Electron per sopprimere i dialoghi di sistema (popup di riempimento automatico, barre di traduzione, prompt di autenticazione NTLM / Kerberos, integrazione con il gestore di password, sovrapposizioni multimediali, dialoghi di prima esecuzione) che altrimenti interromperebbero i tuoi utenti quando le finestre nascoste di Mellowtel elaborano le richieste in background.
Chiamalo all’inizio del tuo file di processo principale, prima di app.whenReady(), e importalo insieme all’esportazione predefinita da @mellowtel-inc/mellowtel-electron. Vedi il README a monte per l’uso canonico.
Consenso dell’Utente
Hai due percorsi per gestire il consenso:- Usa il dialogo nativo integrato tramite
requestConsent(window, incentive). Questo è il percorso più veloce ed è quello mostrato nello snippet sopra. Rende undialog.showMessageBoxnativo di Electron con il tuo testo di incentivo come titolo e persiste automaticamente la decisione dell’utente. - Costruisci la tua interfaccia di consenso e gestisci l’SDK tramite
optIn(),optOut(), egetOptInStatus(). Usa questo se vuoi personalizzare il branding, fornire spiegazioni più ricche, o localizzare oltre ciò che offre il dialogo nativo.
Cosa deve includere il tuo dialogo di consenso
Spiega cosa fa Mellowtel
Usa un linguaggio semplice. Esempio: “Questa app utilizza Mellowtel per condividere la tua larghezza di banda internet inutilizzata. In cambio, ottieni [beneficio/funzionalità]. Puoi rinunciare in qualsiasi momento nelle impostazioni.”
Collega alle politiche
Includi link ai Termini di Servizio e alla Politica sulla Privacy.
Permetti agli utenti di cambiare il loro consenso in seguito
Mellowtel fornisce un dialogo di impostazioni integrato tramiteshowConsentSettings(window). Rende un dialogo nativo con pulsanti Opt In / Opt Out che corrispondono allo stato attuale dell’utente, e chiama internamente optIn() o optOut() (oltre a riconnettere il WebSocket su opt-in) quando l’utente cambia scelta. Collegalo a un elemento di menu o a un pulsante delle impostazioni nella tua app in modo che gli utenti possano rivedere la loro scelta.
Se preferisci costruire il tuo schermo delle impostazioni, chiama getOptInStatus() per leggere lo stato attuale e optIn() / optOut() per cambiarlo.
Riferimento ai Metodi
La classeMellowtel espone i seguenti metodi pubblici. Tutti sono disponibili sull’istanza creata con new Mellowtel(configurationKey, options?).
Ciclo di vita
init(): Promise<void>avvia il servizio se l’utente ha acconsentito, o ritorna silenziosamente in anticipo se non lo ha fatto. Lancia un’eccezione solo quando la chiave di configurazione è vuota.requestConsent(window: BrowserWindow, incentive: string): Promise<boolean | undefined>mostra il dialogo di consenso nativo integrato e persiste il risultato. Ritornatruesu accettazione,falsesu rifiuto o chiusura,undefinedse il consenso era già stato dato.showConsentSettings(window: BrowserWindow): Promise<void>mostra il dialogo integrato per gestire il consenso. L’SDK gestisce internamente le transizioni di opt-in / opt-out quando l’utente cambia la propria scelta.
optIn(): Promise<void>segna l’utente come optato senza mostrare un dialogo. Usa questo solo dopo aver raccolto il consenso tramite la tua interfaccia.optOut(): Promise<void>segna l’utente come optato fuori e chiude la connessione WebSocket attiva.getOptInStatus(): boolean | undefinedritorna lo stato attuale di opt-in, oundefinedse l’utente non ha mai fatto una scelta.getNodeId(): stringritorna l’identificatore del nodo Mellowtel per questa installazione. Utile quando si presentano ticket di supporto.
electron-store e sopravvivono ai riavvii dell’app. Mostrali nella tua interfaccia se vuoi mostrare agli utenti l’impatto del loro opt-in.
getTotalRequestCount(): numberritorna il totale delle richieste elaborate dall’installazione.getDailyRequestCount(): numberritorna il numero di richieste elaborate oggi.getRequestCountForDate(date: string): numberritorna il conteggio per una specifica dataYYYY-MM-DD.getDailyRequestsHistory(): { [date: string]: number }ritorna ogni conteggio giornaliero come una mappa.getRequestCountsInRange(startDate: string, endDate: string): { [date: string]: number }ritorna i conteggi per un intervallo di date.getRequestCounts(): { total: number; daily: number; dailyHistory: { [date: string]: number } }ritorna tutti e tre i contatori in una chiamata.
Spegnimento e Ciclo di Vita
L’SDK Electron non registra i propri gestoribefore-quit o will-quit. Quando il tuo processo Electron esce, la connessione WebSocket in background viene smantellata con esso, e non è richiesta una pulizia esplicita da parte tua.
Se vuoi disconnettere Mellowtel a metà sessione (ad esempio, quando un utente attiva un’impostazione di “pausa” nella tua app), chiama optOut(). Questo cancella sia il flag di opt-in che chiude la connessione attiva. Per riconnettersi, chiama optIn() seguito da init().
Persistenza del Consenso
Lo stato di opt-in è memorizzato nel percorso di configurazione predefinito della piattaformaelectron-store:
- macOS:
~/Library/Application Support/<YourAppName>/config.json - Windows:
%APPDATA%\<YourAppName>\config.json - Linux:
~/.config/<YourAppName>/config.json
Risoluzione dei Problemi
Errore "Package not found" durante l’installazione
Errore "Package not found" durante l’installazione
- Verifica che
.npmrcsia nella radice del progetto, accanto al tuopackage.json. - Assicurati che il token non abbia spazi bianchi iniziali o finali.
- Cancella la cache npm e riprova eseguendo
npm cache clean --forceseguito danpm install.
Il dialogo di consenso non appare mai
Il dialogo di consenso non appare mai
- Assicurati di chiamare
requestConsentdopo cheapp.whenReady()è stato risolto e con un riferimentoBrowserWindowvalido e non distrutto. - Se usi
setupMellowtelApp(), verifica che sia chiamato prima diapp.whenReady(), non dopo.
Il "init() esegue senza errori ma non succede nulla"
Il "init() esegue senza errori ma non succede nulla"
Questo è progettato così.
init() ritorna silenziosamente in anticipo quando l’utente non ha acconsentito. Controlla getOptInStatus() per confermare. Se ritorna undefined o false, esegui prima requestConsent. Nota che il log interno “User is not opted in” è ignorato quando disableLogs è lasciato al suo valore predefinito (vedi “Logs are silent” sotto), quindi il terminale non ti dà alcun segnale finché non cambi quel flag.I log sono silenziosi
I log sono silenziosi
L’opzione del costruttore
disableLogs di default è true. Passa { disableLogs: false } come secondo argomento al costruttore durante l’integrazione per visualizzare lo stato della connessione e l’attività delle richieste nel tuo terminale. Questo è anche il modo più veloce per distinguere un “not opted in” silenzioso da un vero fallimento di connessione.Tempo stimato per completare: 10-15 minuti. Se hai bisogno di aiuto o hai feedback, contattaci a info@mellowtel.com o unisciti alla nostra comunità Discord.