Iniziare
-
Installa il pacchetto
Terminal window npm i @capgo/capacitor-wifiTerminal window pnpm add @capgo/capacitor-wifiTerminal window yarn add @capgo/capacitor-wifiTerminal window bun add @capgo/capacitor-wifi -
Sincronizza con i progetti nativi
Terminal window npx cap syncTerminal window pnpm cap syncTerminal window yarn cap syncTerminal window bunx cap sync -
Configura i permessi
Android: Aggiungi a
AndroidManifest.xml:<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />iOS: Aggiungi a
Info.plist:<key>NSLocationWhenInUseUsageDescription</key><string>Abbiamo bisogno dell'accesso alla posizione per scansionare le reti WiFi</string>
Utilizzo
Section titled “Utilizzo”Importa il plugin e gestisci la connettività WiFi:
import { CapacitorWifi } from '@capgo/capacitor-wifi';
// Ottieni informazioni sulla connessione WiFi correnteconst getWifiInfo = async () => { const info = await CapacitorWifi.getWifiInfo(); console.log('Connesso a:', info.ssid); console.log('Indirizzo IP:', info.ip);};
// Scansiona le reti disponibiliconst scanNetworks = async () => { const { networks } = await CapacitorWifi.scan(); networks.forEach(network => { console.log(`SSID: ${network.ssid}, Segnale: ${network.level}`); });};
// Connettiti a una reteconst connectToWifi = async () => { await CapacitorWifi.connect({ ssid: 'MiaRete', password: 'miapassword' });};Riferimento API
Section titled “Riferimento API”getWifiInfo()
Section titled “getWifiInfo()”Ottiene informazioni sulla rete WiFi attualmente connessa.
interface WifiInfo { ssid: string; // Nome rete bssid: string; // Indirizzo MAC del punto di accesso ip: string; // Indirizzo IP del dispositivo frequency: number; // Frequenza rete (MHz) linkSpeed: number; // Velocità connessione (Mbps) signalStrength: number; // Potenza del segnale (0-100)}
const info = await CapacitorWifi.getWifiInfo();scan()
Section titled “scan()”Scansiona le reti WiFi disponibili.
interface WifiNetwork { ssid: string; // Nome rete bssid: string; // Indirizzo MAC level: number; // Livello del segnale (dBm) frequency: number; // Frequenza rete capabilities: string; // Capacità di sicurezza}
const { networks } = await CapacitorWifi.scan();connect(options)
Section titled “connect(options)”Connette a una rete WiFi.
interface ConnectOptions { ssid: string; // Nome rete password?: string; // Password rete (se protetta) isHiddenSsid?: boolean; // Se l'SSID è nascosto}
await CapacitorWifi.connect({ ssid: 'MiaRete', password: 'miapassword'});disconnect()
Section titled “disconnect()”Disconnette dalla rete WiFi corrente.
await CapacitorWifi.disconnect();getSSID()
Section titled “getSSID()”Ottiene l’SSID della rete attualmente connessa.
const { ssid } = await CapacitorWifi.getSSID();console.log('Connesso a:', ssid);getIP()
Section titled “getIP()”Ottiene l’indirizzo IP corrente del dispositivo.
const { ip } = await CapacitorWifi.getIP();console.log('Indirizzo IP:', ip);Esempio completo
Section titled “Esempio completo”import { CapacitorWifi } from '@capgo/capacitor-wifi';
export class WifiService { async getCurrentNetwork() { try { const info = await CapacitorWifi.getWifiInfo(); return { name: info.ssid, strength: this.getSignalQuality(info.signalStrength), speed: `${info.linkSpeed} Mbps`, ip: info.ip }; } catch (error) { console.error('Impossibile ottenere informazioni WiFi:', error); return null; } }
async scanAndConnect(targetSsid: string, password: string) { try { // Scansiona le reti const { networks } = await CapacitorWifi.scan();
// Trova la rete di destinazione const targetNetwork = networks.find(n => n.ssid === targetSsid);
if (!targetNetwork) { throw new Error(`Rete ${targetSsid} non trovata`); }
console.log(`Rete trovata con segnale: ${targetNetwork.level} dBm`);
// Connetti alla rete await CapacitorWifi.connect({ ssid: targetSsid, password: password });
console.log('Connesso con successo!'); return true; } catch (error) { console.error('Connessione fallita:', error); return false; } }
async findBestNetwork(preferredNetworks: string[]) { const { networks } = await CapacitorWifi.scan();
// Filtra per reti preferite const available = networks.filter(n => preferredNetworks.includes(n.ssid) );
if (available.length === 0) { return null; }
// Ordina per potenza del segnale available.sort((a, b) => b.level - a.level);
return available[0]; }
async monitorConnection(callback: (info: WifiInfo | null) => void) { const checkConnection = async () => { try { const info = await CapacitorWifi.getWifiInfo(); callback(info); } catch (error) { callback(null); } };
// Controlla ogni 5 secondi const interval = setInterval(checkConnection, 5000);
// Controllo iniziale await checkConnection();
// Restituisce la funzione di pulizia return () => clearInterval(interval); }
private getSignalQuality(strength: number): string { if (strength >= 80) return 'Eccellente'; if (strength >= 60) return 'Buono'; if (strength >= 40) return 'Discreto'; return 'Scarso'; }
async getNetworkSecurity(ssid: string): Promise<string> { const { networks } = await CapacitorWifi.scan(); const network = networks.find(n => n.ssid === ssid);
if (!network) { return 'Sconosciuto'; }
const caps = network.capabilities.toLowerCase();
if (caps.includes('wpa3')) return 'WPA3'; if (caps.includes('wpa2')) return 'WPA2'; if (caps.includes('wpa')) return 'WPA'; if (caps.includes('wep')) return 'WEP';
return 'Aperta'; }}Utilizzo avanzato
Section titled “Utilizzo avanzato”Valutazione della qualità della rete
Section titled “Valutazione della qualità della rete”const assessNetworkQuality = async () => { const info = await CapacitorWifi.getWifiInfo();
const quality = { signal: info.signalStrength >= 70 ? 'Eccellente' : info.signalStrength >= 50 ? 'Buono' : info.signalStrength >= 30 ? 'Discreto' : 'Scarso', speed: info.linkSpeed >= 100 ? 'Veloce' : info.linkSpeed >= 50 ? 'Medio' : 'Lento', frequency: info.frequency >= 5000 ? '5GHz' : '2.4GHz' };
console.log('Qualità della rete:', quality); return quality;};Connessione automatica alle reti preferite
Section titled “Connessione automatica alle reti preferite”const autoConnect = async (preferredNetworks: Array<{ ssid: string, password: string }>) => { const { networks } = await CapacitorWifi.scan();
for (const preferred of preferredNetworks) { const found = networks.find(n => n.ssid === preferred.ssid);
if (found) { try { await CapacitorWifi.connect({ ssid: preferred.ssid, password: preferred.password }); console.log(`Connesso a ${preferred.ssid}`); return true; } catch (error) { console.error(`Impossibile connettersi a ${preferred.ssid}`); } } }
return false;};Rilevamento cambio rete
Section titled “Rilevamento cambio rete”class NetworkMonitor { private currentSsid: string | null = null; private listeners: Array<(ssid: string | null) => void> = [];
async start() { setInterval(async () => { try { const { ssid } = await CapacitorWifi.getSSID();
if (ssid !== this.currentSsid) { this.currentSsid = ssid; this.notifyListeners(ssid); } } catch (error) { if (this.currentSsid !== null) { this.currentSsid = null; this.notifyListeners(null); } } }, 3000); }
onNetworkChange(callback: (ssid: string | null) => void) { this.listeners.push(callback); }
private notifyListeners(ssid: string | null) { this.listeners.forEach(listener => listener(ssid)); }}Best practices
Section titled “Best practices”- Permessi: Richiedi i permessi di localizzazione prima di scansionare le reti
- Gestione errori: Racchiudi sempre le operazioni WiFi in blocchi try-catch
- Feedback utente: Mostra indicatori di caricamento durante le operazioni di rete
- Sicurezza: Non archiviare mai le password WiFi in testo normale
- Test: Testa su dispositivi reali poiché le API WiFi potrebbero non funzionare negli emulatori
Differenze tra piattaforme
Section titled “Differenze tra piattaforme”- Richiede permessi di localizzazione per scansionare le reti
- Non può connettersi programmaticamente alle reti (aprirà le Impostazioni)
- Accesso limitato ai dettagli della rete
Android
Section titled “Android”- Controllo WiFi programmatico completo
- Richiede permessi di localizzazione per la scansione delle reti
- Può connettersi/disconnettersi programmaticamente
Risoluzione dei problemi
Section titled “Risoluzione dei problemi”Problemi comuni
Section titled “Problemi comuni”La scansione restituisce vuoto: Verifica che i permessi di localizzazione siano stati concessi Impossibile connettersi alla rete: Verifica che la password sia corretta e la rete sia nel raggio d’azione getWifiInfo fallisce: Assicurati che il dispositivo sia connesso a una rete WiFi Permesso negato: Aggiungi i permessi richiesti ai file di configurazione della piattaforma