Share via


如何管理計量付費網路費用限制 (HTML)

[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]

這個主題詳述使用 Windows.Networking.Connectivity 命名空間中的類別維護網路連線成本或是數據傳輸方案狀態變更感知的最佳做法,並可讓您的應用程式使用這項資訊,以避免因為漫遊或超過指定的數據傳輸限制而導致額外費用。

先決條件

下列範例使用 JavaScript,並且使用網路資訊範例做為依據。 如需使用 JavaScript 建立 Windows 執行階段應用程式的一般協助,請參閱使用 JavaScript 建立您的第一個 Windows 執行階段應用程式

了解 ConnectionProfile 是什麼以及如何存取它所代表的資訊非常重要。如需詳細資訊,請參閱如何抓取網路連線資訊。如需其他程式碼範例,請下載網路資訊範例

什麼是計量付費網路?

計量付費網路是指當使用者使用指定的數據使用量或是漫遊時,而向其收取費用的任何網路。 大部分的行動網路提供者會為每個使用者每個月所傳輸的數據傳輸量設置上限,而超過該數據傳輸上限 (或是在漫遊時傳輸數據) 可能會為使用者帶來高額費用。由於行動式寬頻技術愈來愈流行,因此逐漸增加的數據消耗需求將使這個問題的影響加劇,導致數據傳輸方案更易於變動。因此,Windows 執行階段應用程式需要知道這些網路限制,並在情況變更時調整它的行為。

Windows 8、Windows Server 2012 和 Windows Phone 8.1 及更新版本將計量付費網路分類成允許不受限制、固定或變動的成本限制。NetworkCostType 列舉會定義這些值。如果使用者超過數據傳輸方案所指定的上限或是正在漫遊,大部分的網路都會實施較高的收費或是封鎖/節流存取。

大部分的行動網路使用者一天之內會在各種網路、計量付費網路以及其他網路之間移動。離家或離開辦公室時,可以使用 3G/4G 網路來進行網路連線。在家裡或辦公室通常會有一或多個 Wi-Fi 網路;同樣地,當使用者離開家裡時,最後也將無法使用這些相同的 Wi-Fi 網路。有時根本沒有可用的網路。隨著 Wi-Fi 和行動式寬頻網路日漸普及,類似的網路變更情況也越來越普遍。

誰會受到影響?

計量付費網路頻寬的不當使用會影響您的應用程式和組織之商譽。一般來說,所有 Windows 執行階段應用程式 (特別是傳輸大量資料的應用程式) 都必須遵循下列指導方針。

一般指導方針

您的應用程式可以透過登錄連線變更事件得知連線的變更 (在此案例中為成本或數據傳輸方案變更)。一旦通知有所變更後,您的應用程式就可以先存取目前資訊指示的 ConnectionProfile,再做出調整應用程式行為的決定。如需這個程序的指示,請參閱如何管理網路連線事件與可用性變更

針對計量付費網路案例,下列 ConnectionCost 屬性可用來收集特定連線的資訊和識別目前的數據傳輸方案設定:

屬性 說明

ApproachingDataLimit

取得一個值,以指出連線是否趨近數據傳輸方案所指定的允許數據使用量 (由電訊廠商定義)。這種限制通常稱為數據傳輸上限。

NetworkCostType

取得一個值,以指出目前的連線網路成本。

  • Unrestricted:這個網路連線的使用是無限制的。 它沒有使用的付費方式和容量限制。
  • Fixed:網路連線的使用,在電訊廠商設定的數據限制方面沒有限制。
  • Variable:這個網路連線的使用是按照每個字元組當作計量付費的基礎。
  • Unknown:這個網路連線沒有可用的成本資訊。

OverDataLimit

取得一個值,以指出連線是否已超過數據傳輸方案所指定的允許數據使用量 (由電訊廠商定義)。

Roaming

取得一個值,以指出連線是否連接到家用提供者以外的網路。

 

使用計量付費網路連線到網際網路目的地的應用程式可透過呼叫 GetInternetConnectionProfile 和存取相關成本內容的方式,直接取得成本資訊。使用這個資訊,應用程式即可遵循這些指導方針,決定使用網路資源的最佳方式:

行為 應用程式指導方針 範例

一般

如果 NetworkCostTypeUnrestrictedUnknown,且 ConnectionCost 不是 Roaming,則您的應用程式應該實作 Normal 行為。

Normal 案例中,您的應用程式不應該實作限制。應用程式在成本方面將連線視為 Unlimited,而使用時的付費方式與容量限制為 Unrestricted

範例:

  • 播放整部 HD 影片。
  • 下載沒有限制或 UI 提示的大型檔案。
  • 媒體播放器應用程式播放整部 HD 影片。
  • 應用程式下載大型檔案,而不會出現任何限制或提示。

保守

如果 NetworkCostTypeFixed 或 Variable,且 ConnectionCost 不是 RoamingOverDataLimit,則您的應用程式應該實作 Conservative 行為。

在保守案例中,應用程式會實作限制來最佳化網路使用量,以處理透過計量付費網路進行的傳輸。

範例:

  • 以較低解析度播放影片。
  • 延遲不重要的下載。
  • 避免透過網路預先擷取資訊。
  • 擷取電子郵件時,切換成僅限標題模式。
  • 媒體播放器應用程式用較低解析度播放影片。
  • 應用程式延遲不重要的下載。

選擇加入

如果 ConnectionCostRoamingOverDataLimit,您的應用程式應該實作 Opt-In 行為。

如果是選擇加入案例,您的應用程式會處理網路存取成本遠超過計劃成本的狀況。例如,使用者漫遊時,行動裝置電信業者可能會收取較高費率的數據使用量。

範例:

  • 在使用者存取網路之前先提示。
  • 暫停所有背景資料網路活動。
  • 應用程式提示使用者存取網路。
  • 應用程式暫停所有背景資料網路活動。

 

這個程式碼範例會檢查連線成本並傳回適當應用程式行為的建議。

var CostGuidance = { Normal: 0, Conservative: 1, OptIn: 2 };
// GetCostGuidance returns an object with a Cost (with value of CostGuidance), 
// CostName (a string) and Reason, which says why the cost is what it is.

function GetCostGuidance() 
{
    var connectionCost = Windows.Networking.Connectivity.NetworkInformation.getInternetConnectionProfile().getConnectionCost();
    var networkCostConstants = Windows.Networking.Connectivity.NetworkCostType;
    var Retval = new Object();
    if (connectionCost.roaming || connectionCost.overDataLimit)
    {
        Retval.Cost = CostGuidance.OptIn;
        Retval.CostName = "OptIn";
        Retval.Reason = connectionCost.roaming
            ? "Connection is roaming; using the connection may result in additional charge."
            : "Connection has exceeded the usage cap limit.";
    }
    else if (connectionCost.networkCostType == networkCostConstants.fixed
        || connectionCost.networkCostType == networkCostConstants.variable)
    {
        Retval.Cost = CostGuidance.conservative;
        Retval.CostName = "Conservative";
        Retval.Reason = connectionCost.networkCostType == NetworkCostType.fixed
            ? "Connection has limited allowed usage."
            : "Connection is charged based on usage. ";
    }
    else
    {
        Retval.Cost = CostGuidance.Normal;
        Retval.CostName = "Normal";
        Retval.Reason = connectionCost.networkCostType == networkCostConstants.unknown
            ? "Connection is unknown"
            : "Connection cost is unrestricted";
    }

    return Retval;
}

Windows 市集應用程式和 Windows Phone 市集應用程式的行為差異

有些行動式寬頻提供者並未在針對行動式寬頻佈建的設定檔中為使用者的方案設定成本資訊。使用者必須負責在 Windows 和 Windows Phone 輸入此成本資訊。

針對行動式寬頻網路回報的成本資訊各有不同。在 Windows 8.1,如果使用者未針對行動式寬頻設定成本資訊,NetworkCostType 將回報為 Fixed 成本。在 Windows Phone 8.1,如果未設定行動式寬頻的成本資訊 (行動數據),會回報為 Unknown。此行為差異會影響上述一般指導方針中關於如何檢查連線成本和傳回適當應用程式行為的建議。使用上述指導方針時,Windows 8.1 會建議 Conservative 行為,而 Windows Phone 8.1 會建議 Normal 行為。兩個平台都應該建議 Conservative 行為。因此,Windows Phone 針對行動式寬頻設定檔的適當行為一般指導方針應該加以修訂。

處理最大傳輸大小

透過計量付費網路傳輸大型檔案,可能會大幅增加使用者無法預期的成本。只在檔案大小低於電訊廠商指定的最大傳輸大小時,要在計量付費網路上同步處理、上傳或下載檔案的應用程式才不需要使用者權限。

若要傳輸大量資料,應用程式應該取得使用者權限,或等待存取不受限制的網路。 應用程式也可以選擇讓使用者略過未來的使用者權限訊息。

下列範例程式碼會示範如何抓取連線的最大傳輸大小:

var dataPlanStatus = InternetProfile.getDataPlanStatus();

if (dataPlanStatus.maxTransferSizeInMegabytes !== null) {
  
    mySample.displayStatus("Maximum Transfer Size in Megabytes: " + dataPlanStatus.maxTransferSizeInMegabytes);
}
else{

    mySample.displayError("Maximum Transfer Size in Megabytes: " + "Not Defined");
}

摘要

在這個主題中,我們檢閱了計量付費網路案例,以及如何避免連線的應用程式產生額外使用者費用的最佳方法。

雖然這涵蓋了計量付費網路案例,但是 NetworkStatusChanged 事件也可以代表連線可用性的變更。如需如何妥善處理這些狀況的詳細資訊與指導,請參閱如何管理網路連線事件與可用性變更

相關主題

其他

使用 JavaScript 建立您的第一個 Windows 執行階段應用程式

如何處理網路應用程式中的例外狀況

如何管理網路連線事件與可用性變更

如何抓取網路介面卡和位置資訊

如何抓取網路連線資訊

如何抓取網路連線使用狀況資料

參考

ConnectionCost

ConnectionProfile

DataPlanStatus

NetworkCostType

NetworkInformation

Windows.Networking.Connectivity

範例

網路資訊範例

網路狀態背景範例