Compartilhar via


Desenvolvimento de aplicativos usando vários contextos PDP

Um contexto PDP (Protocolo de Dados de Pacote) oferece uma conexão de dados de pacote sobre a qual um dispositivo e a rede móvel podem trocar pacotes IP. De acordo com os padrões 3GPP, um dispositivo pode ter mais de um contexto PDP ativado por vez. Em Windows 8.1 e Windows 10, há suporte para vários contextos PDP e permite que os aplicativos se comuniquem por contextos PDP especiais para as redes móveis, juntamente com o contexto PDP da Internet com suporte em Windows 8. Você pode usar esse recurso para criar experiências diferenciadas e serviços inovadores no Windows. Você também pode fazer parcerias com desenvolvedores de aplicativos para desenvolver experiências de voip e streaming de vídeo de ótima qualidade para seus clientes.

Aqui está uma figura que mostra como funciona um contexto PDP múltiplo em Windows 8.1 e Windows 10:

Diagrama mostrando como vários contextos PDP funcionam em Windows 8.1 e Windows 10.

Use as seções a seguir neste tópico para saber mais sobre vários contextos PDP:

Principais cenários

Você pode usar vários contextos PDP para habilitar serviços premium.

  • Cobrança diferenciada – você pode variar os dados ou as restrições de cobrança usando vários contextos PDP. Por exemplo, a Contoso é uma operadora móvel que desenvolveu um aplicativo de backup de dados para seus clientes. Como operadora móvel, a Contoso pode criar vários contextos PDP e permitir que os assinantes premium usem o aplicativo gratuitamente. Todos os outros assinantes são cobrados separadamente para usá-lo.

  • Rich Communication Services – uma iniciativa global criada pela GSM Association para fornecer serviços de comunicação avançados, como uma pasta telefônica aprimorada, mensagens aprimoradas e chamadas enriquecidas. Os Serviços de Comunicação Avançada fornecem interoperabilidade entre operadoras móveis e oferecem novas maneiras de usar ativos e recursos existentes para fornecer serviços de comunicação inovadores e de alta qualidade.

  • Conectividade patrocinada – isso permite que os usuários usem um tipo específico de conteúdo sem que ele vá em relação ao uso mensal de dados. O provedor de conteúdo faz um acordo para reembolsar a operadora móvel pagando-os diretamente, fazendo um acordo de compartilhamento de receitas ou algum outro acordo comercial.

  • Hotspot Pessoal – algumas operadoras móveis cobram taxas diferentes quando a conexão está sendo usada como um ponto de acesso pessoal. Você pode usar vários contextos PDP para diferenciar entre os dois.

Aplicativos de banda larga móvel

Os aplicativos de banda larga móvel UWP podem aproveitar vários contextos PDP para ativar um contexto PDP especial e especificar regras para rotear o tráfego de dados. Esses aplicativos podem criar regras para destinos específicos ou para todo o tráfego de dados.

Quando o aplicativo de banda larga móvel precisa trocar dados com a rede, ele verifica as redes disponíveis e conectadas. Se o aplicativo de banda larga móvel tiver uma regra especial para qualquer uma dessas redes, ele usará a API Gerenciador de Conexões para abrir um contexto PDP especial. Se essa conexão for bem-sucedida, o contexto PDP fornecerá regras de roteamento para essa conexão e transferirá os dados usando APIs de rede. O aplicativo de banda larga móvel deverá repetir isso se receber o evento NetworkStatusChanged para ver se alguma conexão foi alterada e se precisa abrir um contexto PDP para a nova conexão.

Fluxograma ilustrando o processo de verificação de aplicativos de banda larga móvel disponíveis e redes conectadas.

APIs de rede

Para enviar dados usando um contexto PDP especial, o aplicativo da Microsoft Store deve usar uma lógica diferente com base nas APIs de rede que usa para transferir dados.

APIs baseadas em HTTP

APIs baseadas em HTTP, como XMLHTTPRequest, IXHR2, Windows.Web.Syndication e Windows.Web.AtomPub, e APIs com base no protocolo HTTP do Windows, como JQuery e Windows.Web.Http, não têm a capacidade de associar a uma interface específica. Para essas APIs, o Windows manipula o roteamento de dados para um contexto PDP especial usando políticas. Depois que o contexto PDP especial for ativado, o aplicativo poderá especificar regras de roteamento com base no contexto de PDP especial e de destino. O destino pode ser nome de domínio ou endereço IP, como video.fabrikam.com, .contoso.com ou 123.23.34.333. Depois de especificar as regras de roteamento, se o aplicativo usar qualquer uma das APIs HTTP acima para transferir os dados, o Windows enviará os dados para o contexto PDP especial com base nas regras de roteamento. Depois que o aplicativo terminar de transferir dados, ele deverá desconectar o contexto PDP especial e remover a política de rota.

Observação

ApIs de transferência em segundo plano e APIs de cliente HTTP (C#) não podem usar uma política de rota.

Diagrama que demonstra o processo de uso de APIs baseadas em HTTP para enviar dados por meio de um contexto PDP especial.

APIs baseadas em soquete

As APIs baseadas em soquete disponíveis no namespace Windows.Networking.Sockets , como TCP, UDP e soquetes de fluxo, fornecem um mecanismo para associar a uma interface específica. Quando um aplicativo usa as APIs de soquete, ele deve se associar a uma interface específica para rotear dados para o contexto PDP especial. Depois que o contexto PDP especial é ativado, a API AcquireConnectionAsync fornece as informações de interface para o aplicativo. Ele pode usar essas informações para associar a uma interface específica e começar a transferir os dados.

Diagrama que descreve o processo de uso de APIs baseadas em soquete para enviar dados por meio de um contexto PDP especial.

Várias informações de API de conteúdo PDP

Windows 8.1 e Windows 10 adicionaram as seguintes APIs para dar suporte a vários contextos PDP:

  • CellularApnContext Essa classe contém propriedades usadas para especificar um ponto de acesso em uma rede. Um objeto CellularApnContext é passado com uma chamada AcquireConnectionAsync para estabelecer uma conexão com um ponto de acesso específico.

  • ConnectivityManager::AcquireConnectionAsync Essa API ativa uma nova conexão para um contexto APN (Nome do Ponto de Acesso) ou PDP especificado. Esse método assíncrono permite que um aplicativo solicite uma conexão com um contexto APN ou PDP específico com as informações de configuração apropriadas. Depois que o APN especial é ativado, ele aparece como uma nova interface virtual para Windows e aplicativos.

  • ConnectivityManager::AddHttpRoutePolicy Esse método adiciona uma política a ser usada pelo tráfego de pilha HTTP para rotear dados para um contexto PDP especial. O aplicativo pode especificar a política com base em destinos, como nome de domínio e endereço IP e perfil de contexto PDP especial. A pilha HTTP do Windows usa a política para rotear os dados para o contexto PDP especial depois que o aplicativo cria a política.

  • ConnectivityManager::RemoveHttpRoutePolicy Esse método remove uma política de rota HTTP adicionada anteriormente.

O código a seguir mostra como usar essas APIs para uma transferência de dados baseada em 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();
}

O código a seguir mostra como usar essas APIs para uma transferência de dados baseada em soquete:

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

Seu aplicativo deve manipular o evento NetworkStatusChanged para lidar com quaisquer transições de rede na conexão de contexto PDP especial.

Cenário: o aplicativo de banda larga móvel Premium fornece acesso gratuito a dados usando APN especial

Nesse cenário, o aplicativo de banda larga móvel fornece acesso gratuito a dados usando um contexto PDP especial. O aplicativo usará uma rede conectada, como uma rede Wi-Fi, se ela for gratuita ou usar um APN especial se estiver conectado a uma rede de operador específica. O código de exemplo a seguir ilustra como um aplicativo pode usar as várias APIs de contexto PDP para transferir dados em um contexto PDP especial se nenhuma rede gratuita estiver conectada.

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

Cenário: o aplicativo de banda larga móvel requer contexto PDP especial para compra e provisionamento de assinatura

Nesse cenário, o aplicativo de banda larga móvel requer um contexto PDP especial para compra e provisionamento de assinatura. Esse aplicativo ativará um contexto PDP especial, independentemente da rede conectada.

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

Considerações sobre aplicativos de banda larga móvel

Os aplicativos de banda larga móvel podem obter informações de uso de dados locais para cada contexto PDP e influenciar o Windows com políticas para contextos PDP especiais.

Uso de dados locais

Em Windows 8, você fornece uma relação contínua baseada em assinatura com os usuários por meio de seu aplicativo de banda larga móvel que tem a capacidade de mostrar o uso de dados atual. Os usuários podem exibir o uso de dados atual e entender seus ciclo de cobrança ou data de término da sessão para tomar uma decisão apropriada. Para reduzir a carga na rede o máximo possível, você deve marcar o uso de dados com a rede periodicamente. O Windows fornece uma API de Uso de Dados local que você pode usar para combinar com o uso de dados para mostrar o uso de dados atual para o usuário.

Um contexto PDP especial fornece a capacidade de diferenciar encargos de acesso a dados para determinados aplicativos ou serviços. Cada contexto PDP diferente é tratado como um perfil diferente para contadores de uso de dados locais. O aplicativo de banda larga móvel pode consultar o uso de dados locais para cada contexto PDP por uma duração específica, semelhante à forma como o contexto PDP da Internet funcionou em Windows 8. Você pode usar essas informações para mostrar a experiência de uso de dados apropriada para o usuário.

O código de exemplo a seguir demonstra como você pode usar as APIs de rede para ler o uso de dados locais para todos os contextos 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

Políticas

Alguns operadores indicaram que contextos PDP especiais têm largura de banda limitada. Aplicativos que ativam o contexto PDP especial, mas não têm acesso para usar o contexto PDP especial, podem criar um ataque de negação de serviço. Você deve restringir o uso de APNs especiais a aplicativos específicos com uma relação comercial. Você pode fornecer ao Windows uma lista de aplicativos UWP com nomes APN especiais. O Windows usará essas informações para limitar o acesso a APNs especiais. Se você não fornecer uma lista, o Windows pressupõe que o contexto PDP especial esteja aberto para todos os aplicativos.

Observação

Isso é apenas para evitar tráfego extra em contextos PDP especiais. Você não pode confiar nisso como um mecanismo de segurança para restringir aplicativos a contextos PDP especiais. Se você quiser restringir o acesso a contextos PDP especiais, deverá implementar algum mecanismo de autenticação ou segurança em sua rede. Por exemplo, você pode usar um filtro que permite apenas determinados endereços IP para um contexto PDP específico.

Algumas redes móveis não dão suporte a vários contextos PDP. Você pode provisionar se sua rede dá suporte a vários contextos PDP ou não. Se sua rede não der suporte a vários contextos PDP, o Windows não deverá permitir que aplicativos criem conexões sob demanda em APNs especiais. Por padrão, o Windows pressupõe que você dê suporte a vários contextos PDP.

O arquivo XML de exemplo a seguir demonstra como usar metadados de provisionamento do Windows para fornecer uma lista de aplicativos permitidos para contextos PDP especiais:

<?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 de áudio e vídeo

Os aplicativos de streaming de áudio podem reproduzir fluxos de áudio ou vídeo usando um contexto PDP especial. Semelhante às APIs HTTP, seu aplicativo pode usar a lógica a seguir para reproduzir áudio ou vídeo usando a <marca de áudio> ou <vídeo> .

Diagrama mostrando o fluxo de trabalho de um aplicativo de streaming usando um contexto PDP especial.

Você pode usar estruturas de vídeo com base nas APIs do WinInet .

InstantGo

O InstantGo fornece uma experiência instantânea e instantânea do usuário que os usuários esperam em seu telefone. E assim como no telefone, o InstantGo permite que o sistema permaneça atualizado, atualizado e acessível sempre que uma rede adequada estiver disponível. O InstantGo em plataformas de computadores de baixa potência deve atender aos requisitos específicos de Certificação do Windows.

Os seguintes cenários têm suporte no InstantGo:

  • Atualizando blocos dinâmicos com conteúdo novo

  • Recebendo email

  • Baixar arquivos ou carregá-los em um site

  • Compartilhando conteúdo, como fotos em um site

  • Recebendo mensagens instantâneas

  • Recebendo chamadas VoIP

  • Comunicação em tempo real

  • Reproduzindo áudio e música em segundo plano

Para obter mais informações sobre o InstantGo, consulte Introdução ao InstantGo.

Seu aplicativo de banda larga móvel pode usar um contexto PDP especial para habilitar alguns desses cenários do InstantGo. Você precisa usar a lógica a seguir para se reconectar ao contexto PDP especial se ele estiver desconectado porque está fora de cobertura. Quando o dispositivo entra no estado de energia em espera conectado, o Windows desconecta todas as conexões com contextos PDP especiais após 10 minutos e seu aplicativo precisa solicitar a conexão novamente.

Fluxograma ilustrando o processo de reconexão a um contexto PDP especial em cenários de InstantGo.

Streaming de áudio em segundo plano

Os aplicativos de streaming de áudio podem áudio em segundo plano e no estado de energia em espera conectado usando um contexto PDP especial. Para obter mais informações sobre como reproduzir áudio em segundo plano, consulte Como reproduzir áudio em segundo plano.

Aplicativos de comunicação em tempo real

Aplicativos de comunicação em tempo real, como VoIP ou aplicativos de chat, podem receber um gatilho de ativação em um contexto PDP especial. O gatilho de ativação permite que seu aplicativo seja disparado o tempo todo, incluindo quando o sistema está no estado de energia em espera conectado.

Para habilitar esse cenário, o dispositivo de banda larga móvel deve dar suporte a filtros de ativação em contexto PDP especial, conforme indicado na especificação do MBIM (Modelo de Interface de Banda Larga Móvel).

Dispositivos de banda larga móvel

Para dar suporte a vários contextos PDP, o firmware do dispositivo de banda larga móvel deve dar suporte a vários contextos PDP, conforme definido na especificação do MBIM. Ele também deve passar em todos os testes do Kit de Certificação de Hardware do Windows específicos para vários contextos PDP.

Como esse recurso é específico da operadora, ele é opcional para dispositivos de banda larga móvel. Se você precisar desse recurso, deverá adicionar várias funcionalidades de contexto PDP nos requisitos do operador com o seguinte:

  • O firmware do dispositivo deve dar suporte a vários fluxos de dados IP, conforme detalhado na seção 10.5.12.1 da especificação do MBIM. Isso inclui o suporte a toda a implementação de controle de CIDs e fluxos de dados IP para suporte total de vários contextos PDP.

  • O firmware do dispositivo deve dar suporte a vários contextos PDP de portador duplo (IPv4 & IPv6) para uso pelo Windows.

    • Isso inclui 1 para conectividade com a Internet e contextos PDP adicionais para aplicativos de banda larga móvel, de acordo com seus requisitos.

    • Isso não requer contextos PDP gerenciados pelo dispositivo que o firmware pode usar para SMS e outros contextos administrativos.

  • O firmware do dispositivo deve ser capaz de aproveitar uma solicitação do sistema operacional host normalmente para um contexto PDP que já é gerenciado internamente pelo dispositivo em seu firmware.

  • O firmware do dispositivo deve continuar a abstrair contextos PDP de SMS e roteá-los por meio dos CIDs de SMS, independentemente do portador usado abaixo.