共用方式為


使用多個 PDP 內容開發應用程式

封包數據通訊協定 (PDP) 內容提供封包數據連線,裝置和行動網路可以交換IP封包。 根據 3GPP 標準,裝置可以同時啟用多個 PDP 上下文。 在 Windows 8.1 和 Windows 10 中,支援多個 PDP 內容,並讓應用程式透過特殊 PDP 內容與行動網路通訊,以及 Windows 8 中支援的因特網 PDP 內容。 您可以使用這項功能,在 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 使用不同的邏輯。

HTTP 型 API

HTTP 型 API、 例如 XMLHTTPRequestIXHR2Windows.Web.Syndication,以及 Windows.Web.AtomPub,以及以 Windows HTTP 通訊協定為基礎的 API,例如 jQuery 和 Windows.Web.Http,都無法系結至特定介面。 針對這些 API,Windows 會使用原則來處理數據路由至特殊 PDP 內容。 啟用特殊 PDP 內容之後,應用程式可以根據目的地和特殊 PDP 內容來指定路由規則。 目的地可以是網域名稱或IP位址,例如 video.fabrikam.com、.contoso.com 或 123.23.34.333。 指定路由規則之後,如果應用程式使用上述任何 HTTP API 來傳輸數據,Windows 會根據路由規則將數據傳送至特殊的 PDP 內容。 應用程式完成傳輸資料之後,它應該中斷特殊 PDP 上下文的連接,並移除路由策略。

注意

背景傳輸 APIHTTP Client(C#) API 無法使用路由原則。

圖表示范如何使用 HTTP 型 API 透過特殊 PDP 內容傳送資料的過程。

基於套接字的 API

Windows.Networking.Sockets 中提供的套接字型 API 命名空間,例如 TCP、UDP 和數據流套接字,提供系結至特定介面的機制。 當應用程式使用套接字API時,它應該綁定至特定介面,以將資料路由傳送至特殊的PDP情境。 啟動特殊 PDP 內容之後,AcquireConnectionAsync API 會提供應用程式的介面資訊。 它可以使用這項資訊系結至特定介面,並開始傳輸數據。

圖表,描述使用套接字型 API 透過特殊 PDP 內容傳送資料的程式。

多個 PDP 內容 API 資訊

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 內容設定檔。 一旦應用程式建立了原則,Windows HTTP 協議棧會利用該原則將資料路由至特殊的 PDP 內容。

  • ConnectivityManager::RemoveHttpRoutePolicy 此方法會移除先前新增的 HTTP 路由原則。

下列程式代碼示範如何針對 HTTP 型資料傳輸使用這些 API:

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。 下列範例程式代碼說明如果沒有任何免費網路連線,應用程式如何使用多個 PDP 內容 API 在特殊 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 Context用於訂用帳戶的購買和布建。

在此情境中,行動寬頻應用程式需要特殊的 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 上下文的本地數據使用資訊,並通過特殊 PDP 上下文的政策來影響 Windows。

本機數據使用量

在 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 上下文但無法存取該上下文的應用程式,可能會引發阻斷服務攻擊。 您應該將特殊 APN 的使用限制為具有商務關係的特定應用程式。 您可以為 Windows 提供具有特殊 APN 名稱的 UWP app 清單。 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 上下文來播放音訊或視訊流。 類似於 HTTP API,您的應用程式可以使用下列邏輯來播放音訊或視訊,方法是使用 <音訊> 或 <視訊> 標記。

圖表顯示使用特殊PDP情境的串流應用程式工作流程。

您可以使用視訊架構,以 WinInet API 為基礎。

InstantGo

InstantGo 提供使用者在其手機上預期的立即開啟、立即關閉用戶體驗。 就像在電話上一樣,InstantGo 可讓系統隨時保持新鮮和最新,並在有適當的網絡可用時保持可連接。 在低功率計算機平臺上的 InstantGo 必須符合特定的 Windows 認證需求。

InstantGo 支援下列案例:

  • 使用全新內容更新動態磚

  • 接收電子郵件

  • 從網站下載或上傳檔案

  • 分享內容,例如網站上的相片

  • 接收立即訊息

  • 接收 VoIP 通話

  • 實時通訊

  • 播放背景音訊和音樂

如需 InstantGo 的詳細資訊,請參閱 InstantGo 簡介

您的行動寬頻應用程式可以使用特殊的 PDP 上下文來啟用其中一些 InstantGo 情境。 如果連線因為超出覆蓋範圍而中斷,您需要使用下列邏輯重新連線到特殊 PDP 情境。 當裝置進入連線待命電源狀態時,Windows 會在 10 分鐘後中斷與特殊 PDP 內容的所有連線,而您的應用程式必須再次要求連線。

流程圖,說明在 InstantGo 情境中重新連接到特殊的 PDP 內容的流程。

背景音頻串流

音訊串流應用程式可以使用特殊的 PDP 內容,在背景播放和連線待命電源狀態下進行音訊串流。 如需如何在背景播放音訊的詳細資訊,請參閱 如何在背景中播放音訊

即時通訊應用程式

實時通訊應用程式,例如 VoIP 或聊天應用程式,可以在特殊的 PDP 上下文上接收喚醒觸發。 喚醒觸發程式可讓您的應用程式隨時觸發,包括當系統處於連線待命電源狀態時。

若要啟用此案例,行動寬頻裝置應支援特殊 PDP 上下文上的喚醒篩選器,如 行動寬頻介面模型 (MBIM) 規範所述。

行動寬頻裝置

若要支援多個 PDP 內容,行動寬頻裝置的韌體必須支援多個 PDP 內容,如 MBIM 規格中所定義,。 它也必須通過多個 PDP 上下文特有的任何 Windows 硬體認證套件的測試。

由於此功能是作員特定的,因此對於行動寬頻裝置而言是選擇性的。 如果您需要這項功能,您必須在營運商要求中新增多個 PDP context 功能,如下所示:

  • 裝置韌體應該支援多個IP數據流,如 MBIM 規格第10.5.12.1節所述,。 這包括支援所有控制 CID 和 IP 數據流實作,以完全支援多個 PDP 內容。

  • 裝置韌體必須支援多個雙承載者 IPv4 & IPv6 PDP 情境,以供 Windows 使用。

    • 這包括 1 個用於因特網連線,以及行動寬頻應用程式的其他 PDP 內容,根據您的需求。

    • 這不需要韌體可能用於SMS和其他管理上下文的裝置管理PDP上下文。

  • 裝置韌體應該能夠流暢地運用主機作業系統的請求,針對已在韌體內部管理的 PDP 上下文。

  • 不論使用何種承載,裝置韌體都應繼續抽象處理 SMS PDP 內容,並通過 SMS CID 進行路由傳送。