Sviluppo di app con più contesti PDP

Un contesto PDP (Packet Data Protocol) offre una connessione dati di pacchetto su cui un dispositivo e la rete mobile possono scambiare pacchetti IP. In base agli standard 3GPP, un dispositivo può avere più di un contesto PDP attivato alla volta. In Windows 8.1 e Windows 10 sono supportati più contesti PDP e consentono alle app di comunicare tramite contesti PDP speciali alle reti mobili insieme al contesto PDP Internet supportato in Windows 8. È possibile usare questa funzionalità per creare esperienze differenziate e servizi innovativi in Windows. È anche possibile collaborare con gli sviluppatori di app per sviluppare esperienze di streaming video e VOIP di alta qualità per i clienti.

Ecco una figura che mostra il funzionamento di più contesti PDP in Windows 8.1 e Windows 10:

Diagramma che mostra il funzionamento di più contesti PDP in Windows 8.1 e Windows 10.

Usare le sezioni seguenti in questo argomento per altre informazioni su più contesti PDP:

Scenari principali

È possibile usare più contesti PDP per abilitare i servizi Premium.

  • Fatturazione differenziata : è possibile variare i dati o le restrizioni di fatturazione usando più contesti PDP. Ad esempio, Contoso è un operatore di telefonia mobile che ha sviluppato un'app di backup dei dati per i clienti. In qualità di operatore di telefonia mobile, Contoso potrebbe creare più contesti PDP e consentire ai sottoscrittori Premium di usare l'app gratuitamente. Tutti gli altri sottoscrittori vengono addebitati separatamente per usarlo.

  • Rich Communication Services : un'iniziativa globale creata dall'associazione GSM per fornire servizi di comunicazione avanzati, ad esempio una rubrica telefonica avanzata, una messaggistica avanzata e chiamate arricchite. Servizi di comunicazione avanzati offrono interoperabilità tra gli operatori di telefonia mobile e offre nuovi modi per usare asset e funzionalità esistenti per offrire servizi di comunicazione di alta qualità e innovativi.

  • Connettività sponsorizzata : consente agli utenti di usare un tipo specifico di contenuto senza che venga rispetto all'utilizzo mensile dei dati. Il provider di contenuti effettua un accordo per rimborsare l'operatore di telefonia mobile pagandoli direttamente, effettuando un accordo di condivisione dei ricavi o un altro accordo aziendale.

  • Hotspot personale : alcuni operatori di telefonia mobile applicano tariffe diverse quando la connessione viene usata come hotspot personale. È possibile usare più contesti PDP per distinguere tra i due.

App mobile broadband

Le app UWP mobile broadband possono sfruttare più contesti PDP per attivare un contesto PDP speciale e specificare regole per instradare il traffico dei dati. Queste app possono creare regole per destinazioni specifiche o per tutto il traffico di dati.

Quando l'app mobile broadband deve scambiare dati con la rete, controlla le reti disponibili e connesse. Se l'app mobile broadband ha una regola speciale per una di queste reti, usa l'API Gestione connessioni per aprire un contesto PDP speciale. Se la connessione ha esito positivo, il contesto PDP fornisce regole di routing per questa connessione e trasferisce i dati usando le API di rete. L'app mobile broadband deve ripetere questa operazione se riceve l'evento NetworkStatusChanged per verificare se sono state modificate connessioni e se è necessario aprire un contesto PDP per la nuova connessione.

Diagramma di flusso che illustra il processo di controllo delle app mobile broadband disponibili e connesse.

API di rete

Per l'invio di dati usando un contesto PDP speciale, l'app di Microsoft Store deve usare logica diversa in base alle API di rete usate per il trasferimento dei dati.

API basate su HTTP

Le API basate su HTTP, ad esempio XMLHTTPRequest, IXHR2, Windows.Web.Syndication e Windows.Web.AtomPub e le API basate sul protocollo HTTP di Windows, ad esempio JQuery e Windows.Web.Http, non hanno la possibilità di eseguire il binding a un'interfaccia specifica. Per queste API, Windows gestisce il routing dei dati in un contesto PDP speciale usando i criteri. Dopo l'attivazione del contesto PDP speciale, l'app può specificare le regole di routing in base alla destinazione e al contesto PDP speciale. La destinazione può essere un nome di dominio o un indirizzo IP, ad esempio video.fabrikam.com, .contoso.com o 123.23.34.333. Dopo aver specificato le regole di routing, se l'app usa una delle API HTTP precedenti per trasferire i dati, Windows invierà i dati al contesto PDP speciale in base alle regole di routing. Al termine del trasferimento dei dati, l'app deve disconnettere il contesto PDP speciale e rimuovere i criteri di route.

Nota

Le API di trasferimento in background e le API client HTTP (C#) non possono usare criteri di route.

Diagramma che illustra il processo di utilizzo delle API basate su HTTP per l'invio di dati tramite un contesto PDP speciale.

API basate su socket

Le API basate su socket disponibili nello spazio dei nomi Windows.Networking.Sockets , ad esempio TCP, UDP e stream socket, forniscono un meccanismo per l'associazione a un'interfaccia specifica. Quando un'app usa le API socket, deve essere associata a un'interfaccia specifica per il routing dei dati al contesto PDP speciale. Dopo l'attivazione del contesto PDP speciale, l'API AcquireConnectionAsync fornisce le informazioni sull'interfaccia all'app. Può usare queste informazioni per eseguire il binding a un'interfaccia specifica e iniziare a trasferire i dati.

Diagramma che illustra il processo di utilizzo delle API basate su socket per l'invio di dati tramite un contesto PDP speciale.

Più informazioni sull'API del contenuto PDP

Windows 8.1 e Windows 10 hanno aggiunto le API seguenti per supportare più contesti PDP:

  • CellularApnContext Questa classe contiene proprietà utilizzate per specificare un punto di accesso in una rete. Un oggetto CellularApnContext viene passato con una chiamata AcquireConnectionAsync per stabilire una connessione a un punto di accesso specifico.

  • ConnectivityManager::AcquireConnectionAsync Questa API attiva una nuova connessione per un contesto APN (Access Point Name) o PDP specificato. Questo metodo asincrono consente a un'app di richiedere una connessione a un contesto APN o PDP specifico con le informazioni di configurazione appropriate. Dopo l'attivazione dell'APN speciale, viene visualizzata come nuova interfaccia virtuale per Windows e le app.

  • ConnectivityManager::AddHttpRoutePolicy Questo metodo aggiunge un criterio da usare per il traffico dello stack HTTP per il routing dei dati a un contesto PDP speciale. L'app può specificare i criteri in base alle destinazioni, ad esempio il nome di dominio e l'indirizzo IP, e un profilo di contesto PDP speciale. Lo stack HTTP di Windows usa i criteri per il routing dei dati al contesto PDP speciale dopo che l'app ha creato i criteri.

  • ConnectivityManager::RemoveHttpRoutePolicy Questo metodo rimuove un criterio di route HTTP aggiunto in precedenza.

Il codice seguente illustra come usare queste API per un trasferimento di dati basato su HTTP:

var connectivity = Windows.Networking.Connectivity;
var currentRoutePolicy = null;
var currentConnectionSession = null;

//  Create PDP context/APN data
var apnContext                      =   new connectivity.CellularApnContext();
apnContext.accessName               =   "myAPN.com";
apnContext.userName                 =   "APNusername"
apnContext.password                 =   "[PLACEHOLDER]";
apnContext.isCompressionEnabled     =   false;
apnContext.authenticationType       =   connectivity.CellularApnAuthenticationType.none;

//  Request a connection to Windows
connectivity.ConnectivityManager.acquireConnectionAsync(apnContext).done(onConnectionSucceeded, onConnectionFailed);


//  On successful Activation of APN, Windows returns a ConnectionSession object that encapsulates the new connection profile

function onConnectionSucceeded(result
{
    // keep the connectionSession in scope
    currentConnectionSession= result;

    //  create a route policy for the new connection
    currentRoutePolicy = new connectivity.routePolicy(currentConnectionSession.ConnectionProfile, new hostName("video.mydomain.com"),Windows.Networking.DomainNameType.suffix);

    //  indicate the new route policy to the Http stack
    connectivity.connectivityManager.addHttpRoutePolicy(currentRoutePolicy);

    // Backend data interaction with appropriate HTTP APIs (IXHR, Open IFrame etc.)


    // After completing the data transfer remove the Route Policy
    connectivity.connectivityManager.removeHttpRoutePolicy(currentRoutePolicy);
    currentRoutePolicy = null;

    // Disconnect the PDP Context to free up resources
    currentConnectionSession.close();
}

Il codice seguente illustra come usare queste API per un trasferimento di dati basato su socket:

// Connect to Special PDP Context
var connectivity = Windows.Networking.Connectivity;
var currentRoutePolicy = null;
var currentConnectionSession = null;

// Create PDP Context/APN Data
var apnContext = new connectivity.CellularApnContext();

// Create PDP context/APN data
var apnContext = new connectivity.CellularApnContext();
apnContext.accessName = "myAPN.com";
apnContext.userName = "APNusername"
apnContext.password = "[PLACEHOLDER]";
apnContext.isCompressionEnabled = false;
apnContext.authenticationType = connectivity.CellularApnAuthenticationType.none;

// Request the connection to Windows
connectivity.ConnectivityManager.acquireConnectionAsync(apnContext).done(onConnectionSucceeded, onConnectionFailed);

// On successful activation of an APN, Windows returns a ConnectionSession object that encapsulates the new connection profile
                function onConnectionSucceeded(result) {

// keep the connectionSession in scope
currentConnectionSession = result;

var socket = new Windows.Networking.Sockets.StreamSocket();
var hostName = new Windows.Networking.HostName("www.contoso.com");
var portNumber = "1234";

// Bind the socket to new Special PDP Context Connection
socket.connectAsync(hostName, portNumber, SocketProtectionLevel.PlainSocket, currentConnectionSession.connectionProfile.networkAdapter).done(onSocketConnectionSucceeded, onSocketConnectionFailed);

function onSocketConnectionSucceeded(result)
{
    // Start transferring data using socket APIs

}

// Closing the sockets
socket.close();

// Disconnect the PDP Context to free up resources
currentConnectionSession.close();

L'app deve gestire l'evento NetworkStatusChanged per gestire qualsiasi transizione di rete nella connessione di contesto PDP speciale.

Scenario: l'app Premium mobile broadband offre l'accesso gratuito ai dati usando un APN speciale

In questo scenario, l'app mobile broadband offre accesso gratuito ai dati usando un contesto PDP speciale. L'app usa una rete connessa, ad esempio una rete Wi-Fi, se è gratuita o usa un APN speciale se connesso a una rete operatore specifica. Il codice di esempio seguente illustra come un'app può usare più API di contesto PDP per il trasferimento di dati in un contesto PDP speciale se non sono connesse reti gratuite.

// Reference the namespace
var connectivity = Windows.Networking.Connectivity;

// Current route policy
var currentRoutePolicy = null;
var currentConnectionSession = null;

function onLoad()
{
  // Register for network status change
  connectivity.networkInformation.addEventListener("networkstatuschanged", OnNetworkStatusChange);
  // Process the current status
  handleNetworkChange();
}

//  Handle newtork status changes
function onNetworkStatusChange()
{
  HandleNetworkChange();
}

// On network status change:
//  if there is no connectionPolicy, evaluate a new one
//  if there is a current connectionPolicy ==> verify it is still valid
//      evaluate a new one if the current connectionPolicy is not valid
function handleNetworkChange()
{
  if (isCurrentPolicyStillValid())
  {
    //the current policy is still valid.
    return;
  }

  //  No policy or current policy is not good anymore
  //  cleanup any previous configuration
  if (currentRoutePolicy)
  {
    connectivity.ConnectivityManager.removeHttpRoutePolicy(currentRoutePolicy);
    currentRoutePolicy = null;
  }

  //  if a different APN was connected, disconnect it to free up resources
  if (connectionConnectionSession != null)
  {
    connectionConnectionSession.close();
    connectionConnectionSession = null;
  }

  // evaluate connection policy
  startEvaluateConnectionPolicy();
}

//  evaluate if the current connectionPolicy is still valid
function isCurrentPolicyStillValid()
{
  if (null != currentRoutePolicy)
  {
    // a policy is currently in place, let's verify if it is still valid
    var currentProfile = currentRoutePolicy.connectionProfile();
    if (NetworkConnectivityLevel.none != currentProfile.GetNetworkConnectivityLevel())
    {
      // current policy is still good. bail out
      return true;
    }
  }
  return false;
}

// starts the evaluation of a new connection policy
function startEvaluateConnectionPolicy()
{
  // first try to get a free network if it is available
  var queryFilter = new connectivity.connectionProfileFilter();
  queryFilter.networkCostType = connectivity.networkCostType.unrestricted;
  queryFilter.isConnected = true;

  connectivity.networkInformation.findConnectionProfilesAsync(queryFilter).done(onSuccess, onFailure);
}

//  Succesfully retrieved at least one free connection profile
function onSuccess(results)
{
  if(results.count > 0)
  {
  //  Enfore the route to the http stack
  enforceHttpRoutePolicy(results[0]);

  // Backend data interaction with appropriate APIs(Open IFrame etc.)

  }
  else
  {
    onFailure();
  }
}

//  there are no free networks available at this time
function onFailure()
{
  //  create a request to connect a specific APN on the network
  // no free network available, connect
  var apnContext                      =   new connectivity.CellularApnContext();
  apnContext.accessPointName          =   "myAPN.com";
  apnContext.userName                 =   "APNusername"
  apnContext.password                 =   "[PLACEHOLDER]";
  apnContext.isCompressionEnabled     =   false;
  apnContext.authenticationType       =   connectivity.CellularApnAuthenticationType.none;

  //
  //  request the connection to Windows
  connectivity.connectivityManager.acquireConnectionAsync(apnContext).done(onConnectionSucceeded, onConnectionFailed);
}

//  on success Windows returns a ConnectionSession object that encapsulates the new connection profile
function onConnectionSucceeded(result)
{
  // keep the connectionSession in scope
  currentConnectionSession= result;
  //  create a route policy for the new connection
  enforceHttpRoutePolicy(currentConnectionSession.ConnectionProfile,new hostName("video.mydomain.com"),Windows.Networking.DomainNameType.suffix);

  // Backend data interaction with appropriate APIs(Open IFrame etc.)

}

//  Windows was not able to connect the specified APN
function onConnectionFailed()
{
  // display error message and just wait for Network Status Change event to try again
}

//  utility function to enforce a route policy
function enforceHttpRoutePolicy(connectionProfile,targetSuffix)
{
  //  Keep the route request global so we can close it later
  currentRoutePolicy= new connectivity.routePolicy(connectionProfile, targetSuffix);
  //  Indicate the new route policy to the Http stack
  connectivity.connectivityManager.addHttpRoutePolicy(currentRoutePolicy);
}

//  cleanup on shutdown
function onShutdown()
{
  //  Remove the route policy from HttpStack
  connectivity.connectivityManager.removeHttpRoutePolicy(currentRoutePolicy);
  currentRoutePolicy = null;

  //  If a different APN was connected, disconnect it to free up resources
  if(currentConnectionSession!= null)
  {
    currentConnectionSession.close();
  }
}

Scenario: l'app Mobile Broadband richiede un contesto PDP speciale per l'acquisto e il provisioning delle sottoscrizioni

In questo scenario, l'app mobile broadband richiede un contesto PDP speciale per l'acquisto e il provisioning delle sottoscrizioni. Questa app attiverà un contesto PDP speciale indipendentemente dalla rete connessa.

var connectivity = Windows.Networking.Connectivity;
var currentRoutePolicy = null;
var currentConnectionSession = null;

function onLoad()
{
  // Register for network status change
  connectivity.networkInformation.addEventListener("networkstatuschanged", OnNetworkStatusChange);
  // Process the current status
  handleNetworkChange();
}

function onNetworkStatusChange()
{
  HandleNetworkChange();
}

//  Create the PDP Context/APN Data
var apnContext                      =   new connectivity.CellularApnContext();
apnContext.providerId               =   "23545";
apnContext.accessPointName          =   "myAPN.com";
apnContext.userName                 =   "APNusername"
apnContext.password                 =   "[PLACEHOLDER]";
apnContext.isCompressionEnabled     =  false;
apnContext.authenticationType       =   connectivity.CellularApnAuthenticationType.none;

//  Request the connection to Windows
connectivity.connectivityManager.acquireConnectionAsync(apnContext).done(onConnectionSucceeded, onConnectionFailed);

//  On successful connection to PDP Context,  Windows returns a ConnectionSession object that incapsulate the new connection profile
function onConnectionSucceeded(result)
{
  // keep the connectionSession in scope
  currentConnectionSession= result;

  //  create a route policy for the new connection
  currentRoutePolicy = new connectivity.routePolicy(currentConnectionSession.ConnectionProfile, new hostName("video.mydomain.com"),Windows.Networking.DomainNameType.suffix);

  //  indicate the new route policy to the Http stack
  connectivity.connectivityManager.addHttpRoutePolicy(currentRoutePolicy);

  // Backend data interaction with appropriate APIs(Open IFrame etc.)

  // After completing the data transfer remove the Route Policy
  connectivity.connectivityManager.removeHttpRoutePolicy(currentRoutePolicy);
  currentRoutePolicy = null;

  // Disconnect the PDP Context to free up resources
  currentConnectionSession.close();

}

function handleNetworkChange()
{
  // App behavior to handle network
  var currentProfile = currentRoutePolicy.connectionProfile();
  if (NetworkConnectivityLevel.none != currentProfile.GetNetworkConnectivityLevel())
  {
    // The special PDP Context is disconnected, app should handle this. It can request another connection to special PDP Context or it can show error to the user.
  }
}

Considerazioni sulle app mobile broadband

Le app mobile broadband possono ottenere informazioni sull'utilizzo dei dati locali per ogni contesto PDP e influenzare Windows con criteri per contesti PDP speciali.

Utilizzo dei dati locali

In Windows 8 si fornisce una relazione continuativa basata su sottoscrizione con gli utenti tramite l'app mobile broadband che ha la possibilità di mostrare l'utilizzo corrente dei dati. Gli utenti possono visualizzare l'utilizzo dei dati corrente e comprendere la data di fine del ciclo di fatturazione o della sessione per prendere una decisione appropriata. Per ridurre il carico sulla rete il più possibile, è necessario controllare periodicamente l'utilizzo dei dati con la rete. Windows fornisce un'API di utilizzo dati locale che è possibile usare per combinare con l'utilizzo dei dati per mostrare l'utilizzo dei dati corrente all'utente.

Un contesto PDP speciale consente di distinguere gli addebiti per l'accesso ai dati a determinate app o servizi. Ogni contesto PDP diverso viene considerato come un profilo diverso per i contatori di utilizzo dei dati locali. L'app mobile broadband può eseguire query sull'utilizzo dei dati locali per ogni contesto PDP per una determinata durata, in modo analogo al funzionamento del contesto PDP Internet in Windows 8. È possibile usare queste informazioni per mostrare all'utente l'esperienza di utilizzo dei dati appropriata.

Il codice di esempio seguente illustra come usare le API di rete per leggere l'utilizzo dei dati locali per tutti i contesti PDP:

// Get the network account ID.
IReadOnlyList<string> networkAccIds = Windows.Networking.NetworkOperators.MobileBroadbandAccount.AvailableNetworkAccountIds;

if (networkAccIds.Count == 0)
{
  rootPage.NotifyUser("No network account ID found", NotifyType.ErrorMessage);
  return;
}

// For the sake of simplicity, assume we want to use the first account.
// Refer to the MobileBroadbandAccount API's how to select a specific account ID.
string networkAccountId = networkAccIds[0];

// Create mobile broadband object for specified network account ID
var mobileBroadbandAccount = Windows.Networking.NetworkOperators.MobileBroadbandAccount.CreateFromNetworkAccountId(networkAccountId);

// Get all connection profiles associated with this network account ID
var connectionProfiles = mobileBroadbandAccount.GetConnectionProfiles();

// Collect local usages for last one hour
DateTime endTime = DateTime.Now;
TimeSpan timeDiff = TimeSpan.FromHours(1);
DateTime startTime = endTime.Subtract(timeDiff);
string message = string.Empty;

foreach (var connectionProfile in connectionProfiles)
{
  // Display local usages for each connection profiles
  DataUsage localUsage = connectionProfile.GetLocalUsage(startTime, endTime);
  message += "Connection Profile Name:  " + connectionProfile.ProfileName + "\n\n";
  message += "Local Data Usage from " + startTime.ToString() + " to " + endTime.ToString() + ":\n";
  message += " Bytes Sent     : " + localUsage.BytesSent + "\n";
  message += " Bytes Received : " + localUsage.BytesReceived + "\n\n";
}

// Print the message string

Criteri

Alcuni operatori hanno indicato che contesti PDP speciali hanno una larghezza di banda limitata. Le app che attivano il contesto PDP speciale ma non hanno accesso all'uso del contesto PDP speciale possono creare un attacco Denial of Service. È consigliabile limitare l'utilizzo di APN speciali a app specifiche con una relazione aziendale. Puoi fornire a Windows un elenco di app UWP con nomi APN speciali. Windows userà tali informazioni per limitare l'accesso a APN speciali. Se non fornisci un elenco, Windows presuppone che il contesto PDP speciale sia aperto per tutte le app.

Nota

Questo è solo per evitare traffico aggiuntivo su contesti PDP speciali. Non è possibile basarsi su questo meccanismo di sicurezza per limitare le app a contesti PDP speciali. Se si vuole limitare l'accesso a contesti PDP speciali, è necessario implementare un meccanismo di autenticazione o di sicurezza nella rete. Ad esempio, è possibile usare un filtro che consenta solo determinati indirizzi IP per un contesto PDP specifico.

Alcune reti mobili non supportano più contesti PDP. È possibile effettuare il provisioning indipendentemente dal fatto che la rete supporti o meno più contesti PDP. Se la rete non supporta più contesti PDP, Windows non deve consentire alle app di creare connessioni su richiesta su APN speciali. Per impostazione predefinita, Windows presuppone che supporti più contesti PDP.

Il file XML di esempio seguente illustra come usare i metadati di provisioning di Windows per fornire un elenco di app consentite per contesti PDP speciali:

<?xml version="1.0" encoding="utf-8"?>
<CarrierProvisioning xmlns="http://www.microsoft.com/networking/CarrierControl/v1">
  <Global>
    <!-- Adjust the Carrier ID to fit your own ID. Refer to the documentation about Carrier ID's. -->
    <CarrierId>{11111111-1111-1111-1111-111111111111}</CarrierId>
    <!-- Adjust the Susbscriber ID. Refer to the documentation about Subscriber ID's. -->
    <SubscriberId>1234567890</SubscriberId>
  </Global>
  <Extensions>
    <Extensions_v2 xmlns="http://www.microsoft.com/networking/CarrierControl/v2">
      <AdditionalPDPContexts>
        <MultiplePDPContextPolicies MultiplePDPContextSupport="true">
          <PDPContextPolicy>
            <!-- Adjust the profile name -->
            <Name>Contoso1</Name>
            <Context>
              <!-- Adjust the access string to your APN. -->
              <AccessString>Contoso.Contoso1</AccessString>
              <!-- Adjust the UserLogonCred to fit your UserLogonCred. Refer to the documentation about UserLogonCred's. -->
              <UserLogonCred>
                <UserName>user1</UserName>
                <Password>[PLACEHOLDER]</Password>
              </UserLogonCred>
            </Context>
            <AppIDList>
              <!-- Adjust the AppId to your AppId -->
              <AppID>Contoso.Sample1.CS_dsarewaj</AppID>
              <AppID>Contoso.Sample2.CPP_dsarewaj</AppID>
            </AppIDList>
          </PDPContextPolicy>
          <PDPContextPolicy>
            <!-- Adjust the profile name -->
            <Name>Contoso2</Name>
            <Context>
              <!-- Adjust the access string to your APN. -->
              <AccessString>Contoso.Contoso2</AccessString>
              <!-- Adjust the UserLogonCred to fit your UserLogonCred. Refer to the documentation about UserLogonCred. -->
              <UserLogonCred>
                <UserName>user2</UserName>
                <Password>[PLACEHOLDER]</Password>
              </UserLogonCred>
            </Context>
            <AppIDList>
              <!-- Adjust the AppId to your AppId -->
              <AppID>Contoso.Sample3.CS_dsarewaj</AppID>
              <AppID>Contoso.Sample4.CPP_dsarewaj</AppID>
            </AppIDList>
          </PDPContextPolicy>
        </MultiplePDPContextPolicies>
      </AdditionalPDPContexts>
    </Extensions_v2>
  </Extensions>
</CarrierProvisioning>

Streaming audio e video

Le app di streaming audio possono riprodurre flussi audio o video usando un contesto PDP speciale. Analogamente alle API HTTP, l'app può usare la logica seguente per riprodurre audio o video usando il <tag audio> o <video> .

Diagramma che mostra il flusso di lavoro di un'app di streaming usando un contesto PDP speciale.

È possibile usare framework video basati sulle API WinInet .

InstantGo

InstantGo offre un'esperienza utente immediata e immediata che gli utenti si aspettano sul telefono. E proprio come sul telefono, InstantGo consente al sistema di rimanere aggiornato, aggiornato e raggiungibile ogni volta che è disponibile una rete appropriata. InstantGo nelle piattaforme PC a basso consumo deve soddisfare requisiti di certificazione Windows specifici.

Gli scenari seguenti sono supportati in InstantGo:

  • Aggiornamento dei riquadri animati con contenuto aggiornato

  • Ricezione di posta elettronica

  • Download di file da o caricamento in un sito Web

  • Condivisione di contenuti, ad esempio foto su un sito Web

  • Ricezione di messaggi istantanei

  • Ricezione di chiamate VoIP

  • Comunicazione in tempo reale

  • Riproduzione di audio e musica di sottofondo

Per altre info su InstantGo, vedi Introduzione a InstantGo.

L'app mobile broadband può usare un contesto PDP speciale per abilitare alcuni di questi scenari InstantGo. È necessario usare la logica seguente per riconnettersi al contesto PDP speciale se è disconnesso perché è fuori copertura. Quando il dispositivo entra nello stato di alimentazione standby connesso, Windows disconnette tutte le connessioni a contesti PDP speciali dopo 10 minuti e l'app deve richiedere nuovamente la connessione.

Diagramma di flusso che illustra il processo di riconnessione a un contesto PDP speciale negli scenari InstantGo.

Streaming audio in background

Le app di streaming audio possono essere audio in background e nello stato di alimentazione standby connesso usando un contesto PDP speciale. Per altre info su come riprodurre audio in background, vedi Come riprodurre l'audio in background.

App di comunicazione in tempo reale

Le app di comunicazione in tempo reale, ad esempio le app VoIP o chat, possono ricevere un trigger di riattivazione in un contesto PDP speciale. Il trigger di riattivazione consente l'attivazione dell'app in qualsiasi momento, incluso quando il sistema si trova nello stato di alimentazione standby connesso.

Per abilitare questo scenario, il dispositivo mobile broadband deve supportare filtri di riattivazione in un contesto PDP speciale, come indicato nella specifica MBIM (Mobile Broadband Interface Model).

Dispositivi mobili a banda larga

Per supportare più contesti PDP, il firmware del dispositivo mobile broadband deve supportare più contesti PDP, come definito nella specifica MBIM. Deve anche superare tutti i test del Kit di certificazione hardware Windows specifici di più contesti PDP.

Poiché questa funzionalità è specifica dell'operatore, è facoltativa per i dispositivi mobili a banda larga. Se è necessaria questa funzionalità, è necessario aggiungere più funzionalità di contesto PDP nei requisiti dell'operatore con quanto segue:

  • Il firmware del dispositivo deve supportare più flussi di dati IP, come descritto nella sezione 10.5.12.1 della specifica MBIM. Ciò include il supporto di tutte le implementazioni del controllo dei CID e dei flussi di dati IP per il supporto completo di più contesti PDP.

  • Il firmware del dispositivo deve supportare più contesti PDP IPv4 (IPv4 & IPv6) da usare da Windows.

    • Sono inclusi 1 per la connettività Internet e contesti PDP aggiuntivi per le app mobile broadband, in base alle esigenze.

    • Ciò non richiede contesti PDP gestiti dal dispositivo che il firmware può usare per SMS e altri contesti amministrativi.

  • Il firmware del dispositivo deve essere in grado di sfruttare normalmente una richiesta del sistema operativo host per un contesto PDP già gestito dal dispositivo internamente nel firmware.

  • Il firmware del dispositivo deve continuare ad astrarre i contesti PDP SMS e instradarli attraverso i CID SMS indipendentemente dal bearer usato sotto.