共用方式為


使用多個 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.SyndicationWindows.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 用戶端 (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 這個類別包含用來指定網路上存取點的屬性。 使用 AcquireConnectionAsync 呼叫傳遞 CellularApnContext 物件,以建立與特定存取點的連線。

  • 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 內容

在此案例中,行動寬頻應用程式需要訂用帳戶購買和布建的特殊 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 內容但無法存取使用特殊 PDP 內容的應用程式,可以建立阻斷服務攻擊。 您應該將特殊 APN 的使用限制為具有商務關係的特定應用程式。 您可以為 Windows 提供具有特殊 APN 名稱的 UWP 應用程式清單。 Windows 會使用該資訊來限制對特殊 APN 的存取。 如果您未提供清單,Windows 會假設所有應用程式都會開啟特殊 PDP 內容。

注意

這隻是為了避免特殊 PDP 內容的額外流量。 您無法依賴此作為將應用程式限制為特殊 PDP 內容的安全性機制。 如果您想要限制對特殊 PDP 內容的存取,您必須在網路上實作一些驗證或安全性機制。 例如,您可以使用只允許特定 PDP 內容特定 IP 位址的篩選條件。

某些行動網路不支援多個 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 內容功能,如下所示:

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

  • 裝置韌體必須支援多個雙持有人 (IPv4 & IPv6) PDP 內容以供 Windows 使用。

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

    • 這不需要韌體可用於SMS和其他系統管理內容的裝置管理 PDP 內容。

  • 裝置韌體應該能夠針對已在其韌體內部受裝置管理的 PDP 內容,適當地利用主機操作系統要求。

  • 無論下方使用的持有人為何,裝置韌體都應該繼續抽象化SMS PDP內容,並透過SMS CID進行路由傳送。