Développement d’applications à l’aide de plusieurs contextes PDP

Un contexte PDP (Packet Data Protocol) offre une connexion de données de paquet sur laquelle un appareil et le réseau mobile peuvent échanger des paquets IP. Conformément aux normes 3GPP, un appareil peut avoir plusieurs contextes PDP activés à la fois. Dans Windows 8.1 et Windows 10, plusieurs contextes PDP sont pris en charge et permettent aux applications de communiquer via des contextes PDP spéciaux vers les réseaux mobiles, ainsi que le contexte PDP Internet pris en charge dans Windows 8. Vous pouvez utiliser cette fonctionnalité pour créer des expériences différenciées et des services innovants sur Windows. Vous pouvez également collaborer avec des développeurs d’applications pour développer des expériences voIP et de streaming vidéo de grande qualité pour leurs clients.

Voici une figure qui montre comment plusieurs contextes PDP fonctionnent dans Windows 8.1 et Windows 10 :

Diagramme montrant le fonctionnement de plusieurs contextes PDP dans Windows 8.1 et Windows 10.

Utilisez les sections suivantes de cette rubrique pour en savoir plus sur plusieurs contextes PDP :

Principaux scénarios

Vous pouvez utiliser plusieurs contextes PDP pour activer les services Premium.

  • Facturation différenciée : vous pouvez faire varier les restrictions de données ou de facturation à l’aide de plusieurs contextes PDP. Par exemple, Contoso est un opérateur mobile qui a développé une application de sauvegarde de données pour ses clients. En tant qu’opérateur mobile, Contoso pouvait créer plusieurs contextes PDP et permettre aux abonnés Premium d’utiliser l’application gratuitement. Tous les autres abonnés sont facturés séparément pour l’utiliser.

  • Rich Communication Services : initiative mondiale créée par l’Association GSM pour fournir des services de communication enrichis, tels qu’un annuaire téléphonique amélioré, une messagerie améliorée et des appels enrichis. Rich Communication Services assure l’interopérabilité entre les opérateurs mobiles et offre de nouvelles façons d’utiliser les ressources et les capacités existantes pour fournir des services de communication innovants et de haute qualité.

  • Connectivité sponsorisée : permet aux utilisateurs d’accéder à un type spécifique de contenu sans que cela va à l’encontre de leur utilisation mensuelle des données. Le fournisseur de contenu prend un arrangement pour rembourser l’opérateur mobile en le payant directement, en effectuant un accord de partage des revenus ou tout autre arrangement commercial.

  • Point d’accès personnel : certains opérateurs mobiles facturent des tarifs différents lorsque la connexion est utilisée comme point d’accès personnel. Vous pouvez utiliser plusieurs contextes PDP pour différencier les deux.

Applications haut débit mobiles

Les applications haut débit mobiles UWP peuvent tirer parti de plusieurs contextes PDP pour activer un contexte PDP spécial et spécifier des règles pour acheminer le trafic de données. Ces applications peuvent créer des règles pour des destinations spécifiques ou pour tout le trafic de données.

Lorsque l’application haut débit mobile doit échanger des données avec le réseau, elle vérifie les réseaux disponibles et connectés. Si l’application haut débit mobile a une règle spéciale pour l’un de ces réseaux, elle utilise l’API Gestionnaire des connexions pour ouvrir un contexte PDP spécial. Si cette connexion réussit, le contexte PDP fournit des règles de routage pour cette connexion et transfère les données à l’aide d’API réseau. L’application haut débit mobile doit répéter cette opération si elle reçoit l’événement NetworkStatusChanged pour voir si les connexions ont changé et si elle doit ouvrir un contexte PDP pour la nouvelle connexion.

Organigramme illustrant le processus de vérification des réseaux disponibles et connectés par les applications haut débit mobiles.

API réseau

Pour envoyer des données à l’aide d’un contexte PDP spécial, l’application du Microsoft Store doit utiliser une logique différente basée sur les API réseau qu’elle utilise pour transférer des données.

API basées sur HTTP

Les API basées sur HTTP, telles que XMLHTTPRequest, IXHR2, Windows.Web.Syndication et Windows.Web.AtomPub, et les API basées sur le protocole HTTP Windows, telles que JQuery et Windows.Web.Http, n’ont pas la possibilité de se lier à une interface spécifique. Pour ces API, Windows gère le routage des données vers un contexte PDP spécial à l’aide de stratégies. Une fois le contexte PDP spécial activé, l’application peut spécifier des règles de routage basées sur la destination et le contexte PDP spécial. La destination peut être un nom de domaine ou une adresse IP, par exemple video.fabrikam.com, .contoso.com ou 123.23.34.333. Après avoir spécifié les règles de routage, si l’application utilise l’une des API HTTP ci-dessus pour transférer les données, Windows envoie les données au contexte PDP spécial en fonction des règles de routage. Une fois que l’application a terminé le transfert des données, elle doit déconnecter le contexte PDP spécial et supprimer la stratégie de routage.

Notes

Les API de transfert en arrière-plan et les API client HTTP(C#) ne peuvent pas utiliser de stratégie de routage.

Diagramme illustrant le processus d’utilisation d’API basées sur HTTP pour l’envoi de données via un contexte PDP spécial.

API basées sur des sockets

Les API basées sur des sockets disponibles dans l’espace de noms Windows.Networking.Sockets , telles que TCP, UDP et les sockets de flux, fournissent un mécanisme de liaison à une interface spécifique. Lorsqu’une application utilise les API de socket, elle doit se lier à une interface spécifique pour le routage des données vers le contexte PDP spécial. Une fois le contexte PDP spécial activé, l’API AcquireConnectionAsync fournit les informations d’interface à l’application. Il peut utiliser ces informations pour établir une liaison à une interface spécifique et commencer à transférer les données.

Diagramme illustrant le processus d’utilisation d’API basées sur des sockets pour l’envoi de données via un contexte PDP spécial.

Informations d’API de contenu PDP multiples

Windows 8.1 et Windows 10 ont ajouté les API suivantes pour prendre en charge plusieurs contextes PDP :

  • CellularApnContext Cette classe contient les propriétés utilisées pour spécifier un point d’accès sur un réseau. Un objet CellularApnContext est passé avec un appel AcquireConnectionAsync pour établir une connexion à un point d’accès spécifique.

  • ConnectivityManager ::AcquireConnectionAsync Cette API active une nouvelle connexion pour un contexte de nom de point d’accès (APN) ou PDP spécifié. Cette méthode asynchrone permet à une application de demander une connexion à un contexte APN ou PDP spécifique avec les informations de configuration appropriées. Une fois l’APN spécial activé, il apparaît sous la forme d’une nouvelle interface virtuelle pour Windows et les applications.

  • ConnectivityManager ::AddHttpRoutePolicy Cette méthode ajoute une stratégie à utiliser par le trafic de pile HTTP pour acheminer les données vers un contexte PDP spécial. L’application peut spécifier la stratégie en fonction des destinations, telles que le nom de domaine et l’adresse IP, et le profil de contexte PDP spécial. La pile HTTP Windows utilise la stratégie pour acheminer les données vers le contexte PDP spécial une fois que l’application a créé la stratégie.

  • ConnectivityManager ::RemoveHttpRoutePolicy Cette méthode supprime une stratégie de routage HTTP précédemment ajoutée.

Le code suivant montre comment utiliser ces API pour un transfert de données 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();
}

Le code suivant vous montre comment utiliser ces API pour un transfert de données basé sur des sockets :

// 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();

Votre application doit gérer l’événement NetworkStatusChanged pour gérer toutes les transitions réseau sur la connexion de contexte PDP spéciale.

Scénario : l’application haut débit mobile Premium fournit un accès gratuit aux données à l’aide d’APN spécial

Dans ce scénario, l’application haut débit mobile fournit un accès gratuit aux données à l’aide d’un contexte PDP spécial. L’application utilise un réseau connecté, tel qu’un réseau Wi-Fi, s’il est gratuit, ou un APN spécial s’il est connecté à un réseau d’opérateur spécifique. L’exemple de code suivant illustre comment une application peut utiliser plusieurs API de contexte PDP pour transférer des données sur un contexte PDP spécial si aucun réseau libre n’est connecté.

// 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();
  }
}

Scénario : L’application haut débit mobile nécessite un contexte PDP spécial pour l’achat et l’approvisionnement d’un abonnement

Dans ce scénario, l’application haut débit mobile nécessite un contexte PDP spécial pour l’achat et l’approvisionnement de l’abonnement. Cette application active un contexte PDP spécial quel que soit le réseau connecté.

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.
  }
}

Considérations relatives aux applications haut débit mobiles

Les applications haut débit mobiles peuvent obtenir des informations d’utilisation des données locales pour chaque contexte PDP et influencer Windows avec des stratégies pour des contextes PDP spéciaux.

Utilisation des données locales

Dans Windows 8, vous fournissez une relation continue basée sur un abonnement avec les utilisateurs via votre application haut débit mobile qui a la possibilité de montrer l’utilisation actuelle des données. Les utilisateurs peuvent afficher leur utilisation actuelle des données et comprendre leur cycle de facturation ou leur date de fin de session pour prendre une décision appropriée. Pour réduire autant que possible la charge sur le réseau, vous devez case activée l’utilisation des données avec le réseau régulièrement. Windows fournit une API d’utilisation des données locale que vous pouvez utiliser pour combiner avec l’utilisation des données afin de montrer l’utilisation actuelle des données à l’utilisateur.

Un contexte PDP spécial vous permet de différencier les frais d’accès aux données de certaines applications ou services. Chaque contexte PDP différent est traité comme un profil différent pour les compteurs d’utilisation de données locaux. L’application haut débit mobile peut interroger l’utilisation des données locales pour chaque contexte PDP pendant une durée particulière, comme le contexte PDP Internet a fonctionné dans Windows 8. Vous pouvez utiliser ces informations pour afficher l’expérience d’utilisation des données appropriée à l’utilisateur.

L’exemple de code suivant montre comment utiliser les API réseau pour lire l’utilisation des données locales pour tous les contextes 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

Stratégies

Certains opérateurs ont indiqué que les contextes PDP spéciaux ont une bande passante limitée. Les applications qui activent le contexte PDP spécial mais n’ont pas accès à l’utilisation du contexte PDP spécial peuvent créer une attaque par déni de service. Vous devez limiter l’utilisation d’APN spéciaux à des applications spécifiques ayant une relation métier. Vous pouvez fournir à Windows une liste d’applications UWP avec des noms APN spéciaux. Windows utilisera ces informations pour limiter l’accès aux APN spéciaux. Si vous ne fournissez pas de liste, Windows suppose que le contexte PDP spécial est ouvert pour toutes les applications.

Notes

Il s’agit simplement d’éviter un trafic supplémentaire sur des contextes PDP spéciaux. Vous ne pouvez pas vous appuyer sur cela comme mécanisme de sécurité pour restreindre les applications à des contextes PDP spéciaux. Si vous souhaitez restreindre l’accès à des contextes PDP spéciaux, vous devez implémenter un mécanisme d’authentification ou de sécurité sur votre réseau. Par exemple, vous pouvez utiliser un filtre qui autorise uniquement certaines adresses IP pour un contexte PDP spécifique.

Certains réseaux mobiles ne prennent pas en charge plusieurs contextes PDP. Vous pouvez spécifier si votre réseau prend en charge plusieurs contextes PDP ou non. Si votre réseau ne prend pas en charge plusieurs contextes PDP, Windows ne doit pas autoriser les applications à créer des connexions à la demande sur des APN spéciaux. Par défaut, Windows suppose que vous prenez en charge plusieurs contextes PDP.

L’exemple de fichier XML suivant montre comment utiliser les métadonnées d’approvisionnement Windows pour fournir une liste d’applications autorisées pour des contextes PDP spéciaux :

<?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 et vidéo

Les applications de streaming audio peuvent lire des flux audio ou vidéo à l’aide d’un contexte PDP spécial. Comme pour les API HTTP, votre application peut utiliser la logique suivante pour lire de l’audio ou de la vidéo à l’aide de la <balise audio> ou <vidéo> .

Diagramme montrant le flux de travail d’une application de streaming à l’aide d’un contexte PDP spécial.

Vous pouvez utiliser des frameworks vidéo basés sur les API WinInet .

InstantGo

InstantGo fournit une expérience utilisateur instantanée et désactivée que les utilisateurs attendent sur leur téléphone. Et tout comme sur le téléphone, InstantGo permet au système de rester frais, à jour et accessible chaque fois qu’un réseau approprié est disponible. InstantGo sur les pc à faible consommation d’énergie doit répondre à des exigences de certification Windows spécifiques.

Les scénarios suivants sont pris en charge dans InstantGo :

  • Mise à jour des vignettes dynamiques avec du contenu nouveau

  • Réception d’un e-mail

  • Téléchargement de fichiers à partir d’un site web ou leur téléchargement sur un site web

  • Partage de contenu, comme des photos sur un site web

  • Réception de messages instantanés

  • Réception d’appels VoIP

  • Communication en temps réel

  • Lecture de l’audio et de la musique en arrière-plan

Pour plus d’informations sur InstantGo, consultez Présentation d’InstantGo.

Votre application haut débit mobile peut utiliser un contexte PDP spécial pour activer certains de ces scénarios InstantGo. Vous devez utiliser la logique suivante pour vous reconnecter au contexte PDP spécial s’il est déconnecté parce qu’il n’est pas couvert. Lorsque l’appareil entre dans l’état d’alimentation de secours connecté, Windows déconnecte toutes les connexions aux contextes PDP spéciaux après 10 minutes et votre application doit demander à nouveau la connexion.

Organigramme illustrant le processus de reconnexion à un contexte PDP spécial dans des scénarios InstantGo.

Streaming audio en arrière-plan

Les applications de streaming audio peuvent audio en arrière-plan et à l’état d’alimentation de secours connecté à l’aide d’un contexte PDP spécial. Pour plus d’informations sur la lecture audio en arrière-plan, consultez Guide pratique pour lire l’audio en arrière-plan.

Applications de communication en temps réel

Les applications de communication en temps réel, telles que les applications VoIP ou de conversation, peuvent recevoir un déclencheur de réveil dans un contexte PDP spécial. Le déclencheur de mise en éveil permet à votre application d’être déclenchée à tout moment, y compris lorsque le système est à l’état d’alimentation de veille connectée.

Pour activer ce scénario, l’appareil haut débit mobile doit prendre en charge les filtres de mise en éveil sur un contexte PDP spécial, comme indiqué dans la spécification MBIM (Mobile Broadband Interface Model).

Appareils haut débit mobiles

Pour prendre en charge plusieurs contextes PDP, le microprogramme de l’appareil haut débit mobile doit prendre en charge plusieurs contextes PDP, comme défini dans la spécification MBIM. Il doit également réussir tous les tests du Kit de certification matérielle Windows spécifiques à plusieurs contextes PDP.

Étant donné que cette fonctionnalité est spécifique à l’opérateur, elle est facultative pour les appareils haut débit mobiles. Si vous avez besoin de cette fonctionnalité, vous devez ajouter plusieurs fonctionnalités de contexte PDP dans les exigences de l’opérateur avec les éléments suivants :

  • Le microprogramme de l’appareil doit prendre en charge plusieurs flux de données IP, comme indiqué dans la section 10.5.12.1 de la spécification MBIM. Cela inclut la prise en charge de toute l’implémentation de contrôle des CID et des flux de données IP pour une prise en charge complète de plusieurs contextes PDP.

  • Le microprogramme de l’appareil doit prendre en charge plusieurs contextes PDP à double porteur (IPv4 & IPv6) pour une utilisation par Windows.

    • Cela inclut 1 pour la connectivité Internet et des contextes PDP supplémentaires pour les applications haut débit mobiles, en fonction de vos besoins.

    • Cela ne nécessite pas de contextes PDP gérés par l’appareil que le microprogramme peut utiliser pour SMS et d’autres contextes administratifs.

  • Le microprogramme de l’appareil doit être en mesure de tirer parti d’une requête du système d’exploitation hôte de manière appropriée pour un contexte PDP qui est déjà géré par l’appareil en interne dans son microprogramme.

  • Le microprogramme de l’appareil doit continuer à extraire les contextes de PDP SMS et à les acheminer via les CID SMS, quel que soit le porteur utilisé en dessous.