如何設定背景連線選項 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
本主題 說明以 JavaScript 和 HTML 撰寫的 Windows 執行階段應用程式可用的背景網路連線功能,以及如何設定背景連線選項。
您必須知道的事
技術
-
使用 XMLHttpRequest 物件的延伸存取 Web 資源。
-
允許利用現代化網站用戶端連線到 Web 服務。
先決條件
下列資訊適用於依賴自動網路連線的任何已連線或網路感知 Windows 執行階段應用程式。這個主題適用於 Windows 8.1、Windows Phone 8.1 和 Windows Server 2012 R2 上使用 JavaScript 和 HTML 撰寫的應用程式。 如需適用於 JavaScript 應用程式的背景工作詳細資訊,請參閱使用背景工作支援應用程式。
若要深入了解 Windows 8.1 和 Windows Server 2012 R2 中以 C++/XAML 撰寫的連線或網路感知 Windows 市集應用程式,以及使用 C#、VB.NET 或 Managed C++ 的 .NET Framework 4.5 應用程式,請參閱如何在背景保持連線。
Windows 市集應用程式的週期模型
Windows 8 和更新版本針對 Windows 執行階段應用程式引進新的週期模型,這與 Windows 8 傳統型應用程式及舊版 Windows 應用程式的模型不同。根據預設,將應用程式移到背景時,Windows 執行階段應用程式會完全暫停作業。暫停應用程式的情況有一些例外 (例如,主動列印、存取音訊資料流以及使用 Windows.Networking.BackgroundTransfer 在背景傳輸檔案)。在這裡的其中一些例外 (例如 Windows.Networking.BackgroundTransfer) 中,應用程式仍然會暫停,但是 Windows 會在另一個程序中繼續網路傳輸。
這個新的 Windows 執行階段應用程式模型可改善應用程式在前景執行的回應性,同時又可減少系統使用的整體電源。 較低的電源使用量可改善電池供電系統在充電之前可以操作的時間長度。此外,這個新模型針對必須在背景工作的應用程式 (例如 VoIP、立即訊息 (IM) 以及電子郵件) 提供一種機制,以便讓使用者可以一直與網路保持連線。這表示需要長時間網路連線到遠端伺服器的應用程式,可以在應用程式暫停後繼續運作。這些是互相牴觸的需求,既要讓即時應用程式一直保持連線,又要嘗試降低電源使用量並提升應用程式的回應性。
為了讓需要自動連線的 Windows 執行階段應用程式 (以 JavaScript 撰寫) 能夠即時連線,Windows 8 引進了一些可用的新功能:
- 背景工作
- SessionConnected 的系統觸發程序
- 時間觸發程序
- Windows 推播通知服務 (WNS)
- 原始推播通知
這些功能可為自動連線的應用程式提供支援,以便在 Windows 執行階段應用程式暫停時,收到原始推播通知。這些應用程式也可描述為可一直保持連線的應用程式。這個主題的焦點是開發人員如何使用 WNS 與原始推播通知,建立即時自動連線的應用程式。應用程式也必須是鎖定畫面應用程式,才能使用這些功能。
網路應用程式也可以使用其他背景工作功能。Windows 執行階段應用程式可以使用的一些其他觸發程序如下:
- 維護觸發程序 (維護的定期事件)
- 使用者與工作階段的系統觸發程序 (已連線/已中斷連線的使用者工作階段、使用者上線/離開,以及線上識別碼變更)
- 網路狀態的系統觸發程序 (網路狀態變更、網際網路可用/無法使用)
- 鎖定畫面的系統觸發程序 (應用程式新增/移除)
當應用式不需要即時連線,但是需要在某些間隔短暫執行時,就可以使用時間觸發程序。當應用程式需要知道事件時,就可以使用系統觸發程序 (例如,網際網路連線或是使用者目前狀態是否可用)。應用程式可以結合各種觸發程序以啟用各種案例。 如需詳細資訊,請參閱使用背景工作支援應用程式。
大部分的 Windows 執行階段應用程式不需要使用在這個主題中詳述的原始推播通知。應用程式可以使用動態磚或使用包含 WNS 推播通知 (而非原始推播通知) 的動態磚,讓使用者覺得應用程式一直在背景執行。 應用程式不需要是鎖定畫面應用程式 (將在這個主題稍後說明) 或是在背景執行,也可以使用動態磚。不過,應用程式必須在鎖定畫面上,才能使用包含原始推播通知的動態磚。
自動連線的需求
若要讓應用程式自動連線且保持連線,通常需要兩個元素:
- 長時間執行程序可確保應用程式收到任何連入網路通知,並快速進行處理。
- 長時間連到遠端端點的網路連線,以便視需要接收和傳送資料。
在舊版 Windows 中,即使應用程式失去焦點還是會持續執行 (在背景)。這些應用程式會在背景維持長時間連線,因為它們可以傳送和接收資料與持續連線訊息。如此會讓應用程式在背景執行並耗用資源,進而影響其他應用程式的回應性與電池使用時間。
Windows 執行階段應用程式與鎖定畫面
Windows 8 引進一個新的軟體模型,會在 Windows 執行階段應用程式移到背景時予以暫停。應用程式暫停後,系統接收的任何封包無法立即傳送到應用程式,而且可能會捨棄傳入的網路封包。應用程式暫停時將不會傳送任何新的封包。所以,這些情況會造成現有網路連線關閉。
若要自動連線,應用程式必須是鎖定畫面應用程式。鎖定畫面應用程式是一種特殊的應用程式類型,可以在鎖定畫面顯示通知,而且當應用程式不在前景時,可以在背景執行程式碼。只有使用一或多個背景工作的應用程式可以是鎖定畫面應用程式。
鎖定畫面應用程式具備一些特殊功能:
- 能夠從 WNS 接收原始推播通知,以便在收到通知後執行程式碼。
- 能夠在發生時間觸發程序時執行程式碼。
- 能夠在啟動使用者工作階段時執行程式碼。
當有新的資訊時,位於背景且釘選到鎖定畫面的應用程式會在鎖定畫面更新和顯示徽章圖示,以便對使用者顯示資訊。這些應用程式也會在訊息抵達時顯示螢幕通知。如果點選或按一下通知,就會要求使用者解除鎖定裝置。解除鎖定裝置後,便會啟動與通知對應的應用程式並顯示內容資訊。
鎖定畫面應用程式有一些重要的限制。使用者在任何時間都只能有最多七個鎖定畫面應用程式。使用者可以隨時在鎖定畫面新增或移除應用程式。
鎖定畫面應用程式的好處在於,當使用者離開裝置時,該應用程式可在稍後為使用者提供可能遺漏的資訊。另一個好處就是針對需要立即使用者動作的事件提供螢幕通知,例如來電、傳入立即訊息或是緊急的電子郵件。
大部分的應用程式都不需要是鎖定畫面應用程式。當應用程式在背景暫停時,可以使用來自 WNS 的推播通知 (非原始推播通知),更新動態磚,讓使用者覺得應用程式還在執行、運作中且具有最新的內容。應用程式也可以使用 WNS 隨時向使用者發出快顯通知,或者在應用程式磚更新徽章計數。
因為鎖定畫面應用程式插槽的數目有限,所以您應該在建立應用程式時,將它規畫為即使沒有鎖定畫面應用程式權限也能運作。使用者必須明確允許在鎖定畫面新增應用程式。當應用程式出現在前景時,就必須能夠運作。成為鎖定畫面應用程式可讓您的應用程式在背景啟用一些相同的狀況。
有一個功能可以讓以 JavaScript 和 HTML 撰寫的應用程式在背景接收連入網路封包
- 由系統接收且可在應用程式執行背景工作的原始推播通知。 使用這個功能後,應用程式可以從 Windows 推播通知服務 (WNS) 收到原始資料。這個資料的內容必須是應用程式了解的內容。應用程式必須登錄 WNS 才能收到原始推播通知。
下方討論的幾個機制可針對放置在鎖定畫面的應用程式,啟用即時狀況。每個機制都有優點與取捨問題。這些機制不會互斥,可以在部分應用程式組合使用。
在 Windows 市集應用程式使用 WNS
WNS 是 Microsoft 為 Windows 8 裝載的雲端服務,可讓 Windows 執行階段應用程式用來接收可執行程式碼的通知、更新動態磚或是引發螢幕通知。若要使用 WNS,本機電腦必須連線到網際網路,以便與 WNS 服務建立通訊。如需詳細資訊,請參閱推播通知概觀。
在前景的 Windows 執行階段應用程式可以使用 WNS 來更新動態磚、向使用者發出通知或是更新徽章。即使應用程式不在鎖定畫面上也能使用 WNS。如果應用程式需要執行程式碼以回應推播通知,則應該考慮在應用程式使用 WNS。
對於不需要在鎖定畫面的應用程式 (大部分的應用程式),可以使用 WNS 來提供動態磚更新。
如果您將 Windows 執行階段應用程式釘選到鎖定畫面,並在背景使用 WNS,應用程式可以即時從 WNS 接收原始推播通知,並在鎖定畫面上將它們顯示為徽章更新或通知。將原始推播通知傳送到鎖定畫面應用程式時,應用程式可以執行程式碼以回應通知。與提供給在 Windows 8.1 與 Windows Server 2012 R2 中以 C++/XAML 撰寫的 Windows 市集應用程式以及採用 C#、VB.NET 或 Managed C++ 的 .NET Framework 4.5 應用程式使用的網路觸發程序相比,使用 WNS 更加省電。
WNS 提供幾個優點:
- WNS 提供最省電的機制,將即使通知傳送到鎖定畫面應用程式。
- WNS 可以簡化應用程式的開發人員模型。在大部分案例中,開發人員不必撰寫任何背景工作,因為作業系統會顯示磚或快顯通知。在一小部分的案例中,如果您的應用程式必須執行背景工作,必須登錄原始推播通知和背景工作才能執行。
- 用戶端應用程式與遠端伺服器之間不必維持持續的通訊端連線,因為 Windows 會維持連到 WNS 的連線。因此,不需要傳送持續連線訊息的額外負荷。
- 用戶端與雲端服務間的單一 WNS 連線可支援本機電腦上的所有應用程式,如此可以延長潛在的用戶端電池使用時間。
- 伺服器端服務的營運成本可能會降低,因為不需要維護用戶端與遠端服務之間的多個駐留 TCP 通訊端連線。
- 您的應用程式不必一直常駐在記憶體中,因為即使應用程式暫停,WNS 仍然可以更新磚、引發快顯通知,或是在收到傳入原始推播通知後觸發背景工作。
- 在 Windows 8.1 與 Windows Server 2012 R2 中,使用原始推播通知的背景工作可以使用 JavaScript、C++/XAML,以及使用 C#、VB.NET 或 Managed C++ 的 .NET Framework 4.5 來撰寫。
JavaScript 沒有使用 ControlChannelTrigger 的網路觸發程序功能。
注意 Windows Phone 不支援 ControlChannelTrigger
在 Windows 8 與 Windows Server 2012 中,使用網路觸發程序的背景網路只能以 C++/XAML,以及使用 C#、VB.NET 或 Managed C++ 的 .NET Framework 4.5 來撰寫。如需詳細資訊,請參閱如何在背景保持連線。
WNS 也有一些限制可能會影響部分應用程式。如果本機電腦連線到封鎖公用網際網路存取的私人家用網路或工作場所網路,則無法使用 WNS。即使可以存取網際網路,WNS 也可能被一些網路防火牆封鎖。使用 WNS 還有一些缺點需要列入考慮。具體而言,會以最佳的方式傳遞通知,但不保證會傳遞成功。原始推播通知的裝載大小上限為 5 KB。
根據已知的優點,我們建議開發人員在建立 VoIP、IM 或電子郵件應用程式時,考慮在鎖定畫面應用程式使用 WNS 通知,但是如果無法符合您的需求,請考慮其他替代方案。
如果您只想要進行動態磚更新或是使用 WNS 引發快顯通知,則不需要建立鎖定畫面應用程式。只有在應用程式需要原始推播通知以觸發背景工作時,才需要搭配鎖定畫面應用程式使用 WNS。
在 Windows 執行階段應用程式中使用時間觸發程序或系統事件觸發程序
使用時間觸發程序可以將鎖定畫面應用程式設定為定期執行程式碼,最小間隔為 15 分鐘。其中一個範例是在應用程式連線到 POP3 或 IMAP 電子郵件伺服器時,輪詢新電子郵件訊息。
鎖定畫面應用程式也可以在使用者登入本機電腦時,使用系統事件觸發程序來執行程式碼 (啟動工作階段的系統觸發程序)。其中一個範例是在使用者啟動使用者工作階段時,將使用者登入立即訊息服務,這樣就可以收到立即訊息。
在這個主題中,我們將重點放在透過 WNS 或網路觸發程序功能使用原始推播通知來建立鎖定畫面應用程式。如需使用計時器的詳細資訊,請參閱如何在計時器上執行背景工作。如需背景工作的詳細資訊,請參閱使用背景工作支援應用程式。
背景工作和沙箱化
背景工作的存留期取決於實作背景工作的函式。為了確保背景工作不會不小心影響電池續航力,Windows 會強制限制背景工作期間應用程式可以使用的 CPU 與網路 I/O 資源量。每個應用程式會定期取得這些資源的配額,而這個配額用完後將會暫停您應用程式的背景工作。應用程式必須具有能夠因為沙箱化而暫停的彈性。
如需詳細資訊,請參閱使用背景工作支援應用程式。
後續步驟
如需如何建立鎖定畫面應用程式以接收使用原始推播通知的背景網路通知的詳細資訊,請參閱如何建立使用背景原始推播通知的鎖定畫面應用程式。
如需登錄推播通知通道並將它傳送給伺服器、登錄背景工作以便從原始推播通知啟用、將原始推播通知傳送到通道並啟用背景工作的處理程序詳細資訊,請參閱如何使用 WNS 將原始推播通知傳遞到鎖定畫面應用程式。
如需如何撰寫背景工作以接收使用原始推播通知的背景網路通知的詳細資訊,請參閱如何撰寫原始推播通知的背景工作。
如需使用原始推播通知的指導方針和檢查清單的詳細資訊,請參閱原始通知的指導方針和檢查清單。
相關主題
其他資源
如何使用 Windows 推播通知服務 (WNS) 進行驗證
參考
Windows.ApplicationModel.Background
Windows.Networking.BackgroundTransfer
Windows.Networking.PushNotifications
範例