Freigeben über


Entwickeln von Apps mit mehreren PDP-Kontexten

Ein Paketdatenprotokollkontext (Packet Data Protocol, PDP) bietet eine Paketdatenverbindung, über die ein Gerät und das Mobilfunknetz IP-Pakete austauschen können. Gemäß 3GPP-Standards kann auf einem Gerät gleichzeitig mehr als ein PDP-Kontext aktiviert sein. In Windows 8.1 und Windows 10 werden mehrere PDP-Kontexte unterstützt und ermöglichen es Apps, über spezielle PDP-Kontexte mit den Mobilfunknetzen zusammen mit dem Internet-PDP-Kontext zu kommunizieren, der in Windows 8 unterstützt wurde. Sie können dieses Feature verwenden, um differenzierte Erfahrungen und innovative Dienste unter Windows zu erstellen. Sie können auch mit App-Entwicklern zusammenarbeiten, um hochwertige VOIP- und Videostreaming-Erfahrungen für ihre Kunden zu entwickeln.

Die folgende Abbildung zeigt, wie mehrere PDP-Kontexte in Windows 8.1 und Windows 10 funktionieren:

Diagramm, das zeigt, wie mehrere PDP-Kontexte in Windows 8.1 und Windows 10 funktionieren.

Verwenden Sie die folgenden Abschnitte in diesem Thema, um mehr über mehrere PDP-Kontexte zu erfahren:

Wichtige Szenarien

Sie können mehrere PDP-Kontexte verwenden, um Premium-Dienste zu aktivieren.

  • Differenzierte Abrechnung : Sie können die Daten- oder Abrechnungseinschränkungen mithilfe mehrerer PDP-Kontexte variieren. Contoso ist beispielsweise ein Mobilfunkanbieter, der eine Datensicherungs-App für seine Kunden entwickelt hat. Als Mobilfunkanbieter könnte Contoso mehrere PDP-Kontexte erstellen und Premium-Abonnenten die App kostenlos nutzen lassen. Allen anderen Abonnenten wird die Nutzung separat in Rechnung gestellt.

  • Rich Communication Services – Eine globale Initiative, die von der GSM Association ins Leben gerufen wurde, um umfassende Kommunikationsdienste wie ein erweitertes Telefonbuch, erweitertes Messaging und angereicherte Anrufe bereitzustellen. Rich Communication Services bieten Interoperabilität zwischen Mobilfunkanbietern und bieten neue Möglichkeiten, vorhandene Ressourcen und Funktionen zu nutzen, um qualitativ hochwertige und innovative Kommunikationsdienste bereitzustellen.

  • Gesponserte Konnektivität : Dadurch können Benutzer eine bestimmte Art von Inhalten abrufen, ohne dass dies ihrer monatlichen Datennutzung entspricht. Der Inhaltsanbieter trifft eine Vereinbarung, um den Mobilfunkanbieter zu erstatten, indem er diese direkt bezahlt, einen Umsatzteilungs-Deal oder eine andere Geschäftsvereinbarung durchführt.

  • Persönlicher Hotspot : Einige Mobilfunkanbieter berechnen unterschiedliche Tarife, wenn die Verbindung als persönlicher Hotspot genutzt wird. Sie können mehrere PDP-Kontexte verwenden, um zwischen den beiden zu unterscheiden.

Mobile Breitband-Apps

UWP mobile Breitband-Apps können mehrere PDP-Kontexte nutzen, um einen speziellen PDP-Kontext zu aktivieren und Regeln zum Weiterleiten von Datenverkehr anzugeben. Diese Apps können Regeln für bestimmte Ziele oder den gesamten Datenverkehr erstellen.

Wenn die mobile Breitband-App Daten mit dem Netzwerk austauschen muss, überprüft sie die verfügbaren und verbundenen Netzwerke. Wenn die mobile Breitband-App über eine spezielle Regel für eines dieser Netzwerke verfügt, verwendet sie die Verbindungs-Manager-API, um einen speziellen PDP-Kontext zu öffnen. Wenn diese Verbindung erfolgreich ist, stellt der PDP-Kontext Routingregeln für diese Verbindung bereit und überträgt die Daten mithilfe von Netzwerk-APIs. Die mobile Breitband-App sollte dies wiederholen, wenn sie das NetworkStatusChanged-Ereignis empfängt , um festzustellen, ob sich Verbindungen geändert haben und ob sie einen PDP-Kontext für die neue Verbindung öffnen muss.

Flussdiagramm, das den Prozess der Überprüfung verfügbarer und verbundener Netzwerke für mobile Breitband-Apps veranschaulicht.

Netzwerk-APIs

Zum Senden von Daten mithilfe eines speziellen PDP-Kontexts muss die Microsoft Store-App eine andere Logik verwenden, die auf Netzwerk-APIs basiert, die sie zum Übertragen von Daten verwendet.

HTTP-basierte APIs

HTTP-basierte APIs wie XMLHTTPRequest, IXHR2, Windows.Web.Syndication und Windows.Web.AtomPub sowie APIs, die auf dem Windows-HTTP-Protokoll basieren, z. B. JQuery und Windows.Web.Http, können nicht an eine bestimmte Schnittstelle gebunden werden. Für diese APIs übernimmt Windows das Routing von Daten an einen speziellen PDP-Kontext mithilfe von Richtlinien. Sobald der spezielle PDP-Kontext aktiviert wurde, kann die App Routingregeln basierend auf dem Ziel- und speziellen PDP-Kontext angeben. Das Ziel kann der Domänenname oder die IP-Adresse sein, z. B. video.fabrikam.com, .contoso.com oder 123.23.34.333. Wenn die App nach dem Angeben der Routingregeln eine der oben genannten HTTP-APIs zum Übertragen der Daten verwendet, sendet Windows die Daten basierend auf Routingregeln an den speziellen PDP-Kontext. Sobald die App die Übertragung von Daten abgeschlossen hat, sollte sie den speziellen PDP-Kontext trennen und die Routenrichtlinie entfernen.

Hinweis

Hintergrundübertragungs-APIs und HTTP-Client(C#)-APIs können keine Routenrichtlinie verwenden.

Diagramm, das den Prozess der Verwendung von HTTP-basierten APIs zum Senden von Daten über einen speziellen PDP-Kontext veranschaulicht.

Socketbasierte APIs

Socket-basierte APIs, die im Windows.Networking.Sockets-Namespace verfügbar sind, z. B. TCP, UDP und Streamsockets, bieten einen Mechanismus zum Binden an eine bestimmte Schnittstelle. Wenn eine App die Socket-APIs verwendet, sollte sie an eine bestimmte Schnittstelle gebunden werden, um Daten an den speziellen PDP-Kontext zu weiterleiten. Sobald der spezielle PDP-Kontext aktiviert wurde, stellt die AcquireConnectionAsync-API die Schnittstelleninformationen für die App bereit. Sie kann diese Informationen verwenden, um an eine bestimmte Schnittstelle zu binden und mit der Übertragung der Daten zu beginnen.

Diagramm, das den Prozess der Verwendung socketbasierter APIs zum Senden von Daten über einen speziellen PDP-Kontext darstellt.

Api-Informationen zu mehreren PDP-Inhalten

Windows 8.1 und Windows 10 haben die folgenden APIs hinzugefügt, um mehrere PDP-Kontexte zu unterstützen:

  • CellularApnContext Diese Klasse enthält Eigenschaften, die zum Angeben eines Zugriffspunkts in einem Netzwerk verwendet werden. Ein CellularApnContext-Objekt wird mit einem AcquireConnectionAsync-Aufruf übergeben, um eine Verbindung mit einem bestimmten Zugriffspunkt herzustellen.

  • ConnectivityManager::AcquireConnectionAsync Diese API aktiviert eine neue Verbindung für einen angegebenen ACCESS Point Name (APN) oder PDP-Kontext. Mit dieser asynchronen Methode kann eine App eine Verbindung mit einem bestimmten APN- oder PDP-Kontext mit den entsprechenden Konfigurationsinformationen anfordern. Nachdem der spezielle APN aktiviert wurde, wird er als neue virtuelle Schnittstelle für Windows und Apps angezeigt.

  • ConnectivityManager::AddHttpRoutePolicy Diese Methode fügt eine Richtlinie hinzu, die vom HTTP-Stapeldatenverkehr zum Weiterleiten von Daten an einen speziellen PDP-Kontext verwendet werden soll. Die App kann die Richtlinie basierend auf Zielen angeben, z. B. Domänenname und IP-Adresse sowie spezielles PDP-Kontextprofil. Der Windows-HTTP-Stapel verwendet die Richtlinie zum Weiterleiten der Daten an den speziellen PDP-Kontext, nachdem die App die Richtlinie erstellt hat.

  • ConnectivityManager::RemoveHttpRoutePolicy Diese Methode entfernt eine zuvor hinzugefügte HTTP-Routenrichtlinie.

Der folgende Code zeigt, wie Sie diese APIs für eine HTTP-basierte Datenübertragung verwenden:

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

Der folgende Code zeigt, wie Sie diese APIs für eine socketbasierte Datenübertragung verwenden:

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

Ihre App muss das NetworkStatusChanged-Ereignis verarbeiten, um alle Netzwerkübergänge für die spezielle PDP-Kontextverbindung zu verarbeiten.

Szenario: Mobile Premium-Breitband-App bietet kostenlosen Datenzugriff über einen speziellen APN

In diesem Szenario bietet die mobile Breitband-App einen kostenlosen Datenzugriff über einen speziellen PDP-Kontext. Die App verwendet entweder ein verbundenes Netzwerk, z. B. ein Wi-Fi-Netzwerk, wenn es kostenlos ist, oder sie verwendet einen speziellen APN, wenn sie mit einem bestimmten Betreibernetzwerk verbunden ist. Der folgende Beispielcode veranschaulicht, wie eine App die mehrere PDP-Kontext-APIs zum Übertragen von Daten in einem speziellen PDP-Kontext verwenden kann, wenn keine freien Netzwerke verbunden sind.

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

Szenario: Mobile Breitband-App erfordert einen speziellen PDP-Kontext für den Kauf und die Bereitstellung von Abonnements

In diesem Szenario erfordert die mobile Breitband-App einen speziellen PDP-Kontext für den Kauf und die Bereitstellung von Abonnements. Diese App aktiviert unabhängig vom verbundenen Netzwerk einen speziellen PDP-Kontext.

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

Überlegungen zu mobilen Breitband-Apps

Mobile Breitband-Apps können lokale Datennutzungsinformationen für jeden PDP-Kontext abrufen und Windows mit Richtlinien für spezielle PDP-Kontexte beeinflussen.

Lokale Datennutzung

In Windows 8 stellen Sie eine fortlaufende abonnementbasierte Beziehung mit Benutzern über Ihre mobile Breitband-App bereit, die die aktuelle Datennutzung anzeigen kann. Benutzer können ihre aktuelle Datennutzung anzeigen und ihr Abrechnungszeitraum- oder Sitzungsenddatum verstehen, um eine angemessene Entscheidung zu treffen. Um die Auslastung des Netzwerks so weit wie möglich zu reduzieren, sollten Sie die Datennutzung mit dem Netzwerk in regelmäßigen Abständen überprüfen. Windows bietet eine lokale Datennutzungs-API, die Sie verwenden können, um mit der Datennutzung zu kombinieren, um dem Benutzer die aktuelle Datennutzung anzuzeigen.

Ein spezieller PDP-Kontext bietet Ihnen die Möglichkeit, Datenzugriffsgebühren für bestimmte Apps oder Dienste zu unterscheiden. Jeder unterschiedliche PDP-Kontext wird als ein anderes Profil für lokale Datennutzungsindikatoren behandelt. Die mobile Breitband-App kann die lokale Datennutzung für jeden PDP-Kontext für einen bestimmten Zeitraum abfragen, ähnlich wie der Internet-PDP-Kontext in Windows 8. Sie können diese Informationen verwenden, um dem Benutzer eine angemessene Datennutzung anzuzeigen.

Der folgende Beispielcode veranschaulicht, wie Sie die Netzwerk-APIs verwenden können, um die lokale Datennutzung für alle PDP-Kontexte zu lesen:

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

Richtlinien

Einige Operatoren haben angegeben, dass spezielle PDP-Kontexte eine begrenzte Bandbreite aufweisen. Apps, die den speziellen PDP-Kontext aktivieren, aber keinen Zugriff auf die Verwendung des speziellen PDP-Kontexts haben, können einen Denial-of-Service-Angriff erstellen. Sie sollten die Verwendung spezieller APNs auf bestimmte Apps mit Geschäftsbeziehung beschränken. Sie können Windows eine Liste von UWP-Apps mit speziellen APN-Namen bereitstellen. Windows verwendet diese Informationen, um den Zugriff auf spezielle APNs zu beschränken. Wenn Sie keine Liste angeben, geht Windows davon aus, dass der spezielle PDP-Kontext für alle Apps geöffnet ist.

Hinweis

Dies ist nur, um zusätzlichen Datenverkehr in speziellen PDP-Kontexten zu vermeiden. Sie können sich nicht darauf als Sicherheitsmechanismus für die Beschränkung von Apps auf spezielle PDP-Kontexte verlassen. Wenn Sie den Zugriff auf spezielle PDP-Kontexte einschränken möchten, müssen Sie einen Authentifizierungs- oder Sicherheitsmechanismus in Ihrem Netzwerk implementieren. Sie könnten beispielsweise einen Filter verwenden, der nur bestimmte IP-Adressen für einen bestimmten PDP-Kontext zulässt.

Einige Mobilfunknetze unterstützen nicht mehrere PDP-Kontexte. Sie können festlegen, ob Ihr Netzwerk mehrere PDP-Kontexte unterstützt oder nicht. Wenn Ihr Netzwerk mehrere PDP-Kontexte nicht unterstützt, sollte Windows apps nicht erlauben, On-Demand-Verbindungen mit speziellen APNs zu erstellen. Standardmäßig geht Windows davon aus, dass Sie mehrere PDP-Kontexte unterstützen.

In der folgenden XML-Beispieldatei wird veranschaulicht, wie Sie Windows-Bereitstellungsmetadaten verwenden, um eine Liste zulässiger Apps für spezielle PDP-Kontexte bereitzustellen:

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

Audio- und Videostreaming

Audiostreaming-Apps können Audio- oder Videostreams mithilfe eines speziellen PDP-Kontexts wiedergeben. Ähnlich wie bei HTTP-APIs kann Ihre App die folgende Logik verwenden, um Audio oder Video mithilfe des <Audio-> oder <Videotags> wiederzugeben.

Diagramm, das den Workflow einer Streaming-App mit einem speziellen PDP-Kontext zeigt.

Sie können Videoframeworks verwenden, die auf den WinInet-APIs basieren.

InstantGo

InstantGo bietet eine sofortige Ein-, Sofort-Off-Benutzererfahrung, die Benutzer auf ihrem Smartphone erwarten. Und genau wie am Telefon ermöglicht InstantGo es dem System, frisch, aktuell und erreichbar zu bleiben, wenn ein geeignetes Netzwerk verfügbar ist. InstantGo auf Low-Power-PCs-Plattformen muss bestimmte Windows-Zertifizierungsanforderungen erfüllen.

Die folgenden Szenarien werden in InstantGo unterstützt:

  • Aktualisieren von Livekacheln mit neuen Inhalten

  • Empfangen von E-Mails

  • Herunterladen von Dateien von einer Website oder Hochladen auf eine Website

  • Freigeben von Inhalten, z. B. Fotos auf einer Website

  • Empfangen von Chatnachrichten

  • Empfangen von VoIP-Anrufen

  • Kommunikation in Echtzeit

  • Wiedergeben von Hintergrundaudio und Musik

Weitere Informationen zu InstantGo finden Sie unter Einführung in InstantGo.

Ihre mobile Breitband-App kann einen speziellen PDP-Kontext verwenden, um einige dieser InstantGo-Szenarien zu ermöglichen. Sie müssen die folgende Logik verwenden, um die Verbindung mit dem speziellen PDP-Kontext wiederherzustellen, wenn die Verbindung getrennt wird, da er nicht abgedeckt ist. Wenn das Gerät in den Betriebszustand Verbundener Standby wechselt, trennt Windows nach 10 Minuten alle Verbindungen mit speziellen PDP-Kontexten, und Ihre App muss die Verbindung erneut anfordern.

Flussdiagramm, das den Prozess der Wiederherstellung der Verbindung mit einem speziellen PDP-Kontext in InstantGo-Szenarien veranschaulicht.

Audiostreaming im Hintergrund

Audiostreaming-Apps können mithilfe eines speziellen PDP-Kontexts Audio im Hintergrund und im Energiezustand "Verbundener Standbymodus" wiedergeben. Weitere Informationen zur Wiedergabe von Audio im Hintergrund finden Sie unter Wiedergeben von Audio im Hintergrund.

Kommunikations-Apps in Echtzeit

Echtzeitkommunikations-Apps wie VoIP- oder Chat-Apps können einen Aktivierungstrigger für einen speziellen PDP-Kontext empfangen. Mit dem Aktivierungstrigger kann Ihre App jederzeit ausgelöst werden, auch wenn sich das System im Netzbetriebszustand "Verbundener Standbymodus" befindet.

Um dieses Szenario zu ermöglichen, sollte das mobile Breitbandgerät Aktivierungsfilter für einen speziellen PDP-Kontext unterstützen, wie in der MbIM-Spezifikation (Mobile Broadband Interface Model) angegeben.

Mobile Breitbandgeräte

Um mehrere PDP-Kontexte zu unterstützen, muss die Firmware des mobilen Breitbandgeräts mehrere PDP-Kontexte unterstützen, wie in der MBIM-Spezifikation definiert. Es muss auch alle Windows Hardware Certification Kit-Tests bestehen, die für mehrere PDP-Kontexte spezifisch sind.

Da dieses Feature betreiberspezifisch ist, ist es für mobile Breitbandgeräte optional. Wenn Sie dieses Feature benötigen, müssen Sie in den Operatoranforderungen mehrere PDP-Kontextfunktionen wie folgt hinzufügen:

  • Die Gerätefirmware sollte mehrere IP-Datenströme unterstützen, wie in Abschnitt 10.5.12.1 der MBIM-Spezifikation beschrieben. Dies umfasst die Unterstützung aller Steuerungsimplementierungen von CIDs und IP-Datenströmen zur vollständigen Unterstützung mehrerer PDP-Kontexte.

  • Die Gerätefirmware muss zur Verwendung durch Windows mehrere PDP-Kontexte mit dualem Bearer (IPv4 & IPv6) unterstützen.

    • Dies umfasst 1 für Internetkonnektivität und zusätzliche PDP-Kontexte für mobile Breitband-Apps gemäß Ihren Anforderungen.

    • Dies erfordert keine geräteverwalteten PDP-Kontexte, die die Firmware für SMS und andere Administrative Kontexte verwenden kann.

  • Die Gerätefirmware sollte in der Lage sein, eine Hostbetriebssystemanforderung ordnungsgemäß für einen PDP-Kontext zu nutzen, der bereits intern in der Firmware vom Gerät verwaltet wird.

  • Die Gerätefirmware sollte weiterhin mit abstrakten SMS-PDP-Kontexten fortfahren und diese unabhängig vom darunter verwendeten Bearer über die SMS-CIDs weiterleiten.