Come gestire i vincoli di costo per le reti a consumo (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

Questo argomento descrive le procedure consigliate per mantenere il controllo sui costi della connessione di rete e sulle modifiche dello stato del piano dati e consentire all'app di usare queste informazioni per evitare di dover sostenere costi aggiuntivi per il roaming o di superare un limite di trasferimento dati specificato mediante le classi dello spazio dei nomi Windows.Networking.Connectivity.

Prerequisiti

Gli esempi seguenti usano JavaScript e sono basati sull'esempio di informazioni di rete. Per informazioni generali sulla creazione di un'app di Windows Runtime in JavaScript, vedi Creare la prima app di Windows Runtime in JavaScript.

È importante sapere che cos'è la classe ConnectionProfile e come accedere alle informazioni che rappresenta. Per altre informazioni, vedi Come recuperare informazioni sulla connessione di rete. Per altri esempi di codice, scarica l'esempio di informazioni di rete.

Che cosa sono le reti a consumo?

Una rete a consumo è una rete che addebita un costo all'utente per l'utilizzo di una quantità di dati specificati o per il roaming. La maggior parte degli operatori di telefonia mobile ha previsto dei tetti per la quantità di dati trasferiti al mese per ogni utente e il superamento del tetto di dati (o il trasferimento di dati in roaming) può comportare addebiti significativi per l'utente. L'aumento di popolarità delle tecnologie a banda larga mobili e l'incremento della domanda per il consumo di dati aumenterà l'impatto di questo problema e porterà all'introduzione di piani dati più variabili. Le app di Windows Runtime devono quindi essere consapevoli di tali limitazioni della rete e adattare il proprio comportamento alle condizioni che cambiano.

Windows 8, Windows Server 2012, Windows Phone 8.1 e le versioni successive suddividono le reti a consumo in categorie a seconda che consentano limiti dei costi senza restrizioni, fissi o variabili. Questi valori vengono definiti dall'enumerazione NetworkCostType. Se un utente supera il limite specificato dal piano dati o è in roaming, la maggior parte delle reti implementa un addebito significativo a livello economico oppure bloccando o limitando l'accesso.

La maggior parte degli utenti di reti mobili usa reti diverse, a consumo e non, nel corso della giornata. Per la connettività di rete, quando ci si trova fuori casa o fuori ufficio, è possibile usare una rete 3G o 4G. A casa o in ufficio, invece, sono spesso disponibili una o più reti Wi-Fi; allo stesso modo, quelle medesime reti Wi-Fi non saranno più disponibili quando l'utente esce di casa. In alcuni casi la rete non è disponibile. In seguito alla proliferazione delle reti Wi-Fi e Mobile Broadband, questi scenari di modifica della rete sono sempre più comuni.

Applicazioni interessate

Un uso improprio dell'ampiezza di banda a consumo può danneggiare la reputazione dell'app e dell'azienda. In genere, tutte le app di Windows Runtime, in particolare quelle che trasferiscono una grande quantità di dati, devono attenersi alle istruzioni seguenti.

Linee guida generali

Perché la tua app possa rilevare le modifiche di connessione, in questo caso le modifiche relative al costo o al piano dati, è possibile registrarsi per gli eventi di modifica di connessione. Dopo aver ricevuto la notifica di una modifica, la tua app può accedere al ConnectionProfile indicato per recuperare le informazioni correnti prima di adattare il proprio comportamento. Per istruzioni su questo processo, vedi Come gestire gli eventi di connessione di rete e le modifiche della disponibilità.

Le seguenti proprietà ConnectionCost, specifiche degli scenari delle reti a consumo, possono essere usate per raccogliere informazioni e identificare le impostazioni correnti del piano dati per una specifica connessione:

Proprietà Descrizione

ApproachingDataLimit

Recupera un valore che indica se una connessione si sta avvicinando alla soglia d'uso dei dati specificata nel piano dati, definita dall'operatore. Questa limitazione è comunemente detta tetto di dati.

NetworkCostType

Recupera un valore che indica il costo di rete corrente di una connessione.

  • Unrestricted: l'uso di questa connessione di rete è illimitato. Non ha costi di utilizzo o vincoli di capacità.
  • Fixed: l'uso di questa connessione di rete non è vincolata fino a un limite di dati impostato dall'operatore.
  • Variable: l'uso di questa connessione di rete è calcolato a byte.
  • Unknown: informazioni sui costi di questa connessione di rete non disponibili.

OverDataLimit

Recupera un valore che indica se una connessione ha superato la soglia d'uso dei dati specificata nel piano dati, definita dall'operatore.

Roaming

Recupera un valore che indica se la connessione è diretta a una rete esterna al provider della rete domestica.

 

Le app che usano reti a consumo per connettersi a destinazioni su Internet possono ottenere informazioni sul costo chiamando direttamente GetInternetConnectionProfile e accedendo alle proprietà relative al costo associate. Utilizzando tali informazioni, un'app può seguire queste linee guida per decidere come utilizzare le risorse di rete in modo ottimale:

Comportamento Linee guida per le app Esempio

Normale

Se NetworkCostType è Unrestricted o Unknown e ConnectionCost non è Roaming, l'app deve implementare un comportamento Normal.

In scenari Normal, l'app non implementa restrizioni. L'app gestisce la connessione come Unlimited dal punto di vista dei costi e Unrestricted per quanto riguarda i costi di utilizzo e i vincoli di capacità.

Esempi:

  • Riproduci un intero filmato ad alta definizione.
  • Scarica un file di grandi dimensioni senza restrizioni o richieste dell'interfaccia utente.
  • Il lettore multimediale può riprodurre per intero un film in HD.
  • L'app può scaricare un file di grandi dimensioni senza restrizioni né richieste.

Prudente

Se NetworkCostType è Fixed o Variable e ConnectionCost non è Roaming o OverDataLimit, l'app deve implementare un comportamento Conservative.

Negli scenari più prudenti, l'app implementa restrizioni per ottimizzare l'uso della rete e gestire i trasferimenti su reti a consumo.

Esempi:

  • Riproduci filmati a bassa risoluzione.
  • Ritarda i download che non sono di importanza critica.
  • Evita la prelettura delle informazioni in rete.
  • Passa alla modalità di sola intestazione quando recuperi i messaggi email.
  • Il lettore multimediale riproduce filmati in risoluzioni inferiori.
  • L'app ritarda i download che non sono di importanza critica.

Consenso esplicito

Se ConnectionCost è Roaming o OverDataLimit, l'app deve implementare un comportamento Opt-In.

Negli scenari di consenso esplicito, l'app gestisce i casi in cui il costo di accesso alla rete è notevolmente superiore a quello del piano a consumo. Ad esempio, quando l'utente si collega in roaming, le tariffe applicate dall'operatore mobile per l'uso dei dati possono essere molto più elevate.

Esempi:

  • Prima di accedere alla rete, mostra una richiesta all'utente.
  • Sospende tutte le attività di rete in background.
  • L'app richiede all'utente di accedere alla rete.
  • L'app sospende tutte le attività di rete in background.

 

Questo esempio di codice controlla i costi di connessione e restituisce suggerimenti sul comportamento appropriato dell'app.

var CostGuidance = { Normal: 0, Conservative: 1, OptIn: 2 };
// GetCostGuidance returns an object with a Cost (with value of CostGuidance), 
// CostName (a string) and Reason, which says why the cost is what it is.

function GetCostGuidance() 
{
    var connectionCost = Windows.Networking.Connectivity.NetworkInformation.getInternetConnectionProfile().getConnectionCost();
    var networkCostConstants = Windows.Networking.Connectivity.NetworkCostType;
    var Retval = new Object();
    if (connectionCost.roaming || connectionCost.overDataLimit)
    {
        Retval.Cost = CostGuidance.OptIn;
        Retval.CostName = "OptIn";
        Retval.Reason = connectionCost.roaming
            ? "Connection is roaming; using the connection may result in additional charge."
            : "Connection has exceeded the usage cap limit.";
    }
    else if (connectionCost.networkCostType == networkCostConstants.fixed
        || connectionCost.networkCostType == networkCostConstants.variable)
    {
        Retval.Cost = CostGuidance.conservative;
        Retval.CostName = "Conservative";
        Retval.Reason = connectionCost.networkCostType == NetworkCostType.fixed
            ? "Connection has limited allowed usage."
            : "Connection is charged based on usage. ";
    }
    else
    {
        Retval.Cost = CostGuidance.Normal;
        Retval.CostName = "Normal";
        Retval.Reason = connectionCost.networkCostType == networkCostConstants.unknown
            ? "Connection is unknown"
            : "Connection cost is unrestricted";
    }

    return Retval;
}

Differenze di comportamento tra app di Windows Store e app di Windows Phone Store

Alcuni provider Mobile Broadband non impostano le informazioni sui costi per il piano di un utente nel profilo predisposto per Mobile Broadband. L'utente è responsabile per l'immissione di queste informazioni sui costi in Windows e Windows Phone.

Le informazioni sui costi sono indicate diversamente per le reti Mobile Broadband. In Windows 8.1, se le informazioni sui costi non sono impostate dall'utente per Mobile Broadband, NetworkCostType viene indicato come costo Fixed. In Windows Phone 8.1, se le informazioni sui costi per Mobile Broadband (rete dati) non sono impostate, verranno indicate come Unknown. Questa differenza di comportamento influisce sulle istruzioni generali fornite in precedenza per controllare i costi di connessione e restituire suggerimenti sul comportamento appropriato dell'app. In base alle precedenti istruzioni, Windows 8.1 suggerirebbe il comportamento Conservative e Windows Phone 8.1 suggerirebbe il comportamento Normal. In realtà entrambe le piattaforme dovrebbero suggerire il comportamento Conservative. Di conseguenza, le istruzioni generali per il comportamento appropriato dovrebbero essere riviste in Windows Phone per i profili Mobile Broadband.

Gestione delle dimensioni massime di trasferimento

Il trasferimento di file di grandi dimensioni su una rete a consumo può generare costi inaspettatamente elevati per l'utente. Le app che sincronizzano, caricano e scaricano file su una rete a consumo possono eseguire queste operazioni senza l'autorizzazione dell'utente solo se le dimensioni del file sono inferiori al valore massimo di trasferimento specificato dall'operatore.

Per trasferire grandi volumi di dati, le app devono ottenere l'autorizzazione dell'utente o attendere l'accesso a una rete senza restrizioni. Facoltativamente, l'applicazione può consentire all'utente di evitare che vengano visualizzati altri messaggi di autorizzazione in futuro.

L'esempio di codice seguente illustra come recuperare le dimensioni massime di trasferimento per una connessione:

var dataPlanStatus = InternetProfile.getDataPlanStatus();

if (dataPlanStatus.maxTransferSizeInMegabytes !== null) {
  
    mySample.displayStatus("Maximum Transfer Size in Megabytes: " + dataPlanStatus.maxTransferSizeInMegabytes);
}
else{

    mySample.displayError("Maximum Transfer Size in Megabytes: " + "Not Defined");
}

In questo argomento abbiamo visto i vari casi di reti a consumo e come evitare che l'app connessa generi costi aggiuntivi a carico dell'utente finale.

Sebbene qui si faccia riferimento a scenari di reti a consumo, un evento NetworkStatusChanged può anche rappresentare cambiamenti nella disponibilità di una connessione. Per altre informazioni e istruzioni sulle modalità di gestione ottimali per questi scenari, vedi Come gestire gli eventi di connessione di rete e le modifiche della disponibilità.

Argomenti correlati

Altro

Creazione della prima app di Windows Runtime in JavaScript

Come gestire le eccezioni nelle app di rete

Come gestire gli eventi di connessione di rete e le modifiche della disponibilità

Come recuperare le informazioni su scheda di rete e località

Come recuperare le informazioni sulla connessione di rete

Come recuperare le informazioni sull'uso della connessione di rete

Riferimenti

ConnectionCost

ConnectionProfile

DataPlanStatus

NetworkCostType

NetworkInformation

Windows.Networking.Connectivity

Esempi

Esempio di informazioni di rete

Esempio di background di stato di rete