Поделиться через


Разработка приложений с использованием нескольких контекстов PDP

Контекст протокола пакетных данных (PDP) предлагает подключение к данным пакетов, через которое устройство и мобильная сеть могут обмениваться IP-пакетами. В соответствии со стандартами 3GPP на устройстве может быть активировано несколько контекстов PDP одновременно. В Windows 8.1 и Windows 10 поддерживается несколько контекстов PDP, что позволяет приложениям взаимодействовать через специальные контексты PDP с мобильными сетями вместе с контекстом ИНТЕРНЕТА PDP, поддерживаемым в Windows 8. Эту функцию можно использовать для создания дифференцированных интерфейсов и инновационных служб в Windows. Вы также можете сотрудничать с разработчиками приложений, чтобы разработать высококачественные возможности потоковой передачи видео и voIP для своих клиентов.

Ниже показано, как работает контекст нескольких PDP в Windows 8.1 и Windows 10:

Схема работы нескольких контекстов PDP в Windows 8.1 и Windows 10.

Дополнительные сведения о нескольких контекстах PDP см. в следующих разделах этой статьи:

Основные сценарии

Для включения служб уровня "Премиум" можно использовать несколько контекстов PDP.

  • Дифференцированное выставление счетов . Вы можете изменить данные или ограничения выставления счетов с помощью нескольких контекстов PDP. Например, компания Contoso является оператором мобильной связи, который разработал приложение для резервного копирования данных для своих клиентов. Как оператор мобильной связи Компания Contoso может создать несколько контекстов PDP и позволить подписчикам уровня "Премиум" бесплатно использовать приложение. Все остальные подписчики оплачиваются отдельно за его использование.

  • Расширенные коммуникационные услуги — глобальная инициатива, созданная Ассоциацией GSM для предоставления расширенных услуг коммуникации, таких как расширенная телефонная книга, расширенные сообщения и расширенные звонки. Расширенные службы коммуникации обеспечивают взаимодействие между операторами мобильной связи и предлагают новые способы использования существующих ресурсов и возможностей для предоставления высококачественных и инновационных услуг связи.

  • Спонсируемое подключение — это позволяет пользователям использовать определенный тип содержимого без учета ежемесячного использования данных. Поставщик контента принимает меры по возмещению расходов оператору мобильной связи, оплачивая их напрямую, делая сделку о совместном использовании дохода или какую-либо другую деловую сделку.

  • Личный хот-спот . Некоторые операторы мобильной связи взимают разные тарифы, когда подключение используется в качестве личного хот-спота. Для различения этих двух контекстов можно использовать несколько контекстов PDP.

Мобильные широкополосные приложения

Мобильные широкополосные приложения UWP могут использовать преимущества нескольких контекстов PDP для активации специального контекста PDP и указания правил для маршрутизации трафика данных. Эти приложения могут создавать правила для определенных назначений или для всего трафика данных.

Когда мобильное широкополосное приложение должно обмениваться данными с сетью, оно проверяет доступные и подключенные сети. Если мобильное широкополосное приложение имеет специальное правило для любой из этих сетей, оно использует API диспетчер подключений для открытия специального контекста PDP. В случае успешного подключения контекст PDP предоставляет правила маршрутизации для этого подключения и передает данные с помощью сетевых API. Мобильное широкополосное приложение должно повторить это, если оно получает событие NetworkStatusChanged , чтобы узнать, изменились ли какие-либо подключения и нужно ли открыть контекст PDP для нового подключения.

Блок-схема, иллюстрирующая процесс проверки доступных и подключенных сетей мобильного широкополосного приложения.

Сетевые API

Для отправки данных с помощью специального контекста PDP приложение Microsoft Store должно использовать другую логику в зависимости от сетевых API, используемых для передачи данных.

API на основе HTTP

API на основе HTTP, такие как XMLHTTPRequest, IXHR2, Windows.Web.Syndication и Windows.Web.AtomPub, а также API на основе протокола HTTP Windows, такие как JQuery и Windows.Web.Http, не имеют возможности привязки к определенному интерфейсу. Для этих API Windows обрабатывает маршрутизацию данных в специальный контекст PDP с помощью политик. После активации специального контекста PDP приложение может указать правила маршрутизации на основе назначения и специального контекста PDP. Назначением может быть доменное имя или IP-адрес, например video.fabrikam.com, .contoso.com или 123.23.34.333. Если после указания правил маршрутизации приложение использует любой из приведенных выше API HTTP для передачи данных, Windows будет отправлять данные в специальный контекст PDP на основе правил маршрутизации. После завершения передачи данных приложение должно отключить специальный контекст PDP и удалить политику маршрутизации.

Примечание

API фоновой передачи и API-интерфейсы HTTP-клиента (C#) не могут использовать политику маршрутизации.

Схема, демонстрирующая процесс использования API на основе HTTP для отправки данных через специальный контекст PDP.

API на основе сокетов

API на основе сокетов, доступные в пространстве имен Windows.Networking.Sockets , такие как TCP, UDP и сокеты потоков, предоставляют механизм для привязки к определенному интерфейсу. Когда приложение использует API сокетов, оно должно привязаться к определенному интерфейсу для маршрутизации данных к специальному контексту PDP. После активации специального контекста PDP API AcquireConnectionAsync предоставляет сведения об интерфейсе приложению. Эта информация может использоваться для привязки к определенному интерфейсу и начала передачи данных.

Схема, показывающая процесс использования API на основе сокетов для отправки данных через специальный контекст PDP.

Сведения об API содержимого нескольких PDP

Windows 8.1 и Windows 10 добавили следующие API для поддержки нескольких контекстов PDP:

  • CellularApnContext Этот класс содержит свойства, используемые для указания точки доступа в сети. Объект CellularApnContext передается с вызовом AcquireConnectionAsync , чтобы установить подключение к определенной точке доступа.

  • ConnectivityManager::AcquireConnectionAsync Этот API активирует новое подключение для указанного контекста точки доступа (APN) или PDP. Этот асинхронный метод позволяет приложению запрашивать подключение к определенному контексту APN или PDP с соответствующими сведениями о конфигурации. После активации специального APN он отображается как новый виртуальный интерфейс для Windows и приложений.

  • ConnectivityManager::AddHttpRoutePolicy Этот метод добавляет политику, используемую трафиком стека HTTP для маршрутизации данных в специальный контекст PDP. Приложение может указать политику на основе назначений, таких как доменное имя и IP-адрес, а также специальный профиль контекста PDP. После создания политики стек HTTP Windows использует политику для маршрутизации данных в специальный контекст PDP.

  • ConnectivityManager::RemoveHttpRoutePolicy Этот метод удаляет ранее добавленную политику маршрутов HTTP.

В следующем коде показано, как использовать эти API для передачи данных на основе 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();
}

В следующем коде показано, как использовать эти API для передачи данных на основе сокета.

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

Ваше приложение должно обрабатывать событие NetworkStatusChanged для обработки любых сетевых переходов в специальном контекстном подключении PDP.

Сценарий: мобильное широкополосное приложение уровня "Премиум" предоставляет бесплатный доступ к данным с помощью специальных APN

В этом сценарии мобильное широкополосное приложение предоставляет бесплатный доступ к данным с помощью специального контекста PDP. Приложение либо использует подключенную сеть, например сеть Wi-Fi, если она бесплатна, либо использует специальный APN при подключении к определенной сети оператора. В следующем примере кода показано, как приложение может использовать несколько API контекста PDP для передачи данных в специальном контексте PDP, если свободные сети не подключены.

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

Сценарий. Для мобильного широкополосного приложения требуется специальный контекст PDP для приобретения и подготовки подписки

В этом сценарии для мобильного широкополосного приложения требуется специальный контекст PDP для приобретения и подготовки подписки. Это приложение активирует специальный контекст PDP независимо от подключенной сети.

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

Рекомендации по мобильным широкополосным приложениям

Мобильные широкополосные приложения могут получать сведения об использовании локальных данных для каждого контекста PDP и влиять на Windows с помощью политик для специальных контекстов PDP.

Использование локальных данных

В Windows 8 вы обеспечиваете постоянную связь с пользователями на основе подписки с помощью мобильного широкополосного приложения, которое может отображать текущее использование данных. Чтобы принять соответствующее решение, пользователи могут просматривать текущие данные об использовании данных и понимать дату окончания период выставления счетов или сеанса. Чтобы максимально снизить нагрузку на сеть, следует периодически проверка использование данных в сети. Windows предоставляет локальный API использования данных, который можно использовать для объединения с использованием данных, чтобы показать текущее использование данных пользователю.

Специальный контекст PDP позволяет различать расходы на доступ к данным для определенных приложений или служб. Каждый контекст PDP рассматривается как отдельный профиль для локальных счетчиков использования данных. Мобильное широкополосное приложение может запрашивать локальное использование данных для каждого контекста PDP в течение определенного времени, аналогично тому, как контекст ИНТЕРНЕТА PDP работал в Windows 8. Эти сведения можно использовать, чтобы показать пользователю соответствующий интерфейс использования данных.

В следующем примере кода показано, как использовать сетевые API для чтения локальных данных для всех контекстов 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

Политики

Некоторые операторы указали, что специальные контексты PDP имеют ограниченную пропускную способность. Приложения, которые активируют специальный контекст PDP, но не имеют доступа к использованию специального контекста PDP, могут создать атаку типа "отказ в обслуживании". Следует ограничить использование специальных APN определенными приложениями с бизнес-отношениями. Вы можете предоставить Windows список приложений UWP со специальными именами APN. Windows будет использовать эти сведения для ограничения доступа к специальным APN. Если список не указан, Windows предполагает, что для всех приложений открыт специальный контекст PDP.

Примечание

Это просто для того, чтобы избежать дополнительного трафика в специальных контекстах PDP. Вы не можете полагаться на этот механизм безопасности для ограничения приложений специальными контекстами PDP. Если вы хотите ограничить доступ специальными контекстами PDP, необходимо реализовать некоторые механизмы проверки подлинности или безопасности в сети. Например, можно использовать фильтр, разрешающий только определенные IP-адреса для определенного контекста PDP.

Некоторые мобильные сети не поддерживают несколько контекстов PDP. Вы можете выполнить подготовку независимо от того, поддерживает ли ваша сеть несколько контекстов PDP. Если сеть не поддерживает несколько контекстов PDP, Windows не должна разрешать приложениям создавать подключения по запросу к специальным APN. По умолчанию Windows предполагает, что вы поддерживаете несколько контекстов PDP.

В следующем примере XML-файла показано, как использовать метаданные подготовки Windows для предоставления списка разрешенных приложений для специальных контекстов PDP:

<?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>

Потоковая передача звука и видео

Приложения потоковой передачи звука могут воспроизводить аудио- и видеопотоки с помощью специального контекста PDP. Как и в СЛУЧАЕ с API HTTP, приложение может использовать следующую логику для воспроизведения звука или видео с помощью тега <audio> или <video> .

Схема, показывающая рабочий процесс приложения потоковой передачи с использованием специального контекста PDP.

Вы можете использовать платформы видео на основе API WinInet .

Instantgo

InstantGo обеспечивает мгновенное взаимодействие с пользователем, которое пользователи ожидали на своем телефоне. И так же, как и на телефоне, InstantGo позволяет системе оставаться актуальной, актуальной и доступной всякий раз, когда доступна подходящая сеть. InstantGo на маломощных компьютерах должны соответствовать определенным требованиям сертификации Windows.

В InstantGo поддерживаются следующие сценарии:

  • Обновление живых плиток с использованием нового содержимого

  • Получение электронной почты

  • Скачивание файлов с веб-сайта или их отправка на веб-сайт

  • Предоставление общего доступа к содержимому, например фотографиям на веб-сайте

  • Получение мгновенных сообщений

  • Прием вызовов VoIP

  • Взаимодействие в режиме реального времени

  • Воспроизведение фонового звука и музыки

Дополнительные сведения о InstantGo см. в статье Введение в InstantGo.

Приложение мобильной широкополосной связи может использовать специальный контекст PDP для включения некоторых из этих сценариев InstantGo. Для повторного подключения к специальному контексту PDP необходимо использовать следующую логику, если она отключена из-за отсутствия покрытия. Когда устройство перейдет в состояние подключенного режима ожидания, Windows отключит все подключения к специальным контекстам PDP через 10 минут, и приложению придется снова запросить подключение.

Блок-схема, иллюстрирующая процесс повторного подключения к специальному контексту PDP в сценариях InstantGo.

Потоковая передача звука в фоновом режиме

Приложения потоковой передачи звука могут выполнять звук в фоновом режиме и в режиме ожидания с помощью специального контекста PDP. Дополнительные сведения о воспроизведении звука в фоновом режиме см. в разделе Практическое руководство. Воспроизведение звука в фоновом режиме.

Приложения для общения в режиме реального времени

Приложения для общения в режиме реального времени, такие как VoIP или приложения чата, могут получать триггер пробуждения в специальном контексте PDP. Триггер пробуждения позволяет запускать приложение в любое время, в том числе когда система находится в режиме ожидания подключения.

Чтобы включить этот сценарий, мобильное широкополосное устройство должно поддерживать фильтры пробуждения в специальном контексте PDP, как указано в спецификации модели интерфейса мобильной широкополосной связи (MBIM).

Мобильные широкополосные устройства

Для поддержки нескольких контекстов PDP встроенное ПО устройства мобильной широкополосной связи должно поддерживать несколько контекстов PDP, как определено в спецификации MBIM. Он также должен пройти все тесты комплекта сертификации оборудования Windows, относящиеся к нескольким контекстам PDP.

Так как эта функция зависит от оператора, она является необязательной для мобильных широкополосных устройств. Если вам нужна эта функция, необходимо добавить несколько функциональных возможностей контекста PDP в требованиях оператора со следующими параметрами:

  • Встроенное ПО устройства должно поддерживать несколько ip-потоков данных, как описано в разделе 10.5.12.1 спецификации MBIM. Это включает поддержку всех реализаций управления CID и потоков данных IP для полной поддержки нескольких контекстов PDP.

  • Встроенное ПО устройства должно поддерживать несколько контекстов PDP с двумя носителями (IPv4 & IPv6) для использования Windows.

    • Сюда входит 1 для подключения к Интернету и дополнительные контексты PDP для мобильных широкополосных приложений в соответствии с вашими требованиями.

    • Для этого не требуются управляемые устройством контексты PDP, которые встроенное ПО может использовать для SMS и других административных контекстов.

  • Встроенное ПО устройства должно иметь возможность корректно использовать запрос операционной системы узла для контекста PDP, который уже управляется устройством внутри встроенного ПО.

  • Встроенное ПО устройства должно по-прежнему абстрагировать контексты SMS PDP и направлять их через SMS-идентификаторы CID независимо от носителя, используемого ниже.