快速入門:建立和登錄原始通知背景工作 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
注意 不是使用 JavaScript?請參閱快速入門:建立和登錄原始通知背景工作 (XAML)。
您可以為 Windows 市集應用程式建立並登錄背景工作功能。這個程式碼會在收到原始通知時執行以做為回應,讓應用程式即使不在前景執行,也能具備功能。
若要完成這個程序,您必須編輯三個不同的檔案:應用程式的程式碼、應用程式的資訊清單,以及包含背景工作程式碼的新 JavaScript 檔案。
先決條件
若要了解這個主題或使用這個主題提供的程式碼,您需要:
- 熟悉推播通知。如需詳細資訊,請參閱推播通知概觀。
- 熟悉原始推播通知。如需詳細資訊,請參閱原始通知概觀。
- 能夠將推播通知傳送到 Windows 推播通知服務 (WNS) 的雲端服務。如需詳細資訊,請參閱快速入門:傳送推播通知。
- 背景工作的上層應用程式。這個應用程式必須具備可在鎖定畫面上顯示的權限。如需詳細資訊,請參閱鎖定畫面概觀。
指示
1. 建立背景工作類別
在專案中建立新的 JavaScript (.js) 檔案。在此案例中,我們將這個檔案稱為 examplebackgroundtask.js
。收到原始通知時,將觸發此檔案中的程式碼並在背景執行。將以下基本架構 JavaScript 函式新增到該檔案。
這個範例的 doWork
函式 (當然,您可以自行命名) 包含組成實際背景工作的程式碼。首先,它會透過 Windows.UI.WebUI.WebUIBackgroundTaskInstance 類別抓取通知的內容,這是用來取得背景工作的目前執行個體相關資訊。應用程式定義之原始通知內容特定的程式碼內文將取代 "// ..." 註解。
重要 請注意,工作程式碼是透過呼叫 JavaScript 內建的 close 函式來完成。每當 JavaScript 背景工作完成其工作或取消時,都必須呼叫這個方法。如果背景工作並未自行關閉,則即使背景工作已完成,背景工作的處理程序仍然會繼續存在,並耗用記憶體和電池使用時間。
(function () {
"use strict";
var backgroundTaskInstance = Windows.UI.WebUI.WebUIBackgroundTaskInstance.current;
function doWork() {
var notificationContent = backgroundTaskInstance.triggerDetails.content;
// ...
close();
}
doWork();
})();
2. 在應用程式資訊清單中宣告背景工作
注意 這個步驟的先決條件是,您的應用程式必須選擇一個鎖定畫面選項,並提供徽章標誌,才能支援背景工作。如需詳細資訊,請參閱快速入門:在鎖定畫面上顯示磚更新與徽章更新。
您必須先在應用程式資訊清單中宣告背景工作及其觸發程序,應用程式才能登錄該背景工作。這可以直接以 XML 完成,或者透過 Microsoft Visual Studio 資訊清單編輯器完成。
若要使用資訊清單編輯器,請在 Visual Studio 中按兩下您專案的 Package.appxmanifest 檔案。在 [宣告] 索引標籤上,從 [可用宣告]**** 下拉式清單中選擇 [背景工作]。做為觸發程序,請選擇 [屬性]**** 下方的 [推播通知]。在 [起始頁]**** 方塊中,輸入背景工作 .js 檔案的名稱,在我們的案例中為
examplebackgroundtask.js
。如果您的應用程式使用一個以上的背景工作,請針對每個工作重複執行這個步驟,每次都指向不同的檔案。
若要將資訊直接新增到資訊清單的 XML,請在文字編輯器中開啟該資訊清單。在 Extensions 元素中,為背景工作類別新增 Extension 元素。Category 屬性應該設定為 "windows.backgroundTasks",而 StartPage 屬性應該為背景工作的 .js 檔案命名,在我們的案例中為
examplebackgroundtask.js
。如果您的應用程式使用一個以上的背景工作,請針對每個工作新增個別的 Extension 元素,每個元素都要指向不同的 .js 檔案。
您必須列出背景工作所使用的每個觸發程序類型。由於我們正在建立要在回應原始通知時觸發的背景工作,因此將宣告推播通知觸發程序。將 BackgroundTasks 元素新增到 Extension 元素,並將它的 Task 元素設定為 "pushNotification"。
這裡顯示完整的 Extension 元素。
<Extension Category="windows.backgroundTasks" StartPage="js\examplebackgroundtask.js">
<BackgroundTasks>
<Task Type="pushNotification"/>
</BackgroundTasks>
</Extension>
3. 在應用程式中登錄背景工作
您要將下列範例提供的程式碼新增到應用程式 (例如,在它的 Default.js 檔案中),以便將背景工作登錄為原始通知的回應。
首先,判斷背景工作是否已登錄。這個步驟很重要。如果您的應用程式不會檢查現有背景工作登錄,則可以多次登錄相同的工作。這樣可能會發生讓工作無法完成的效能問題和 CPU 使用率。
這個範例會逐一查看 Windows.ApplicationModel.Background.BackgroundTaskRegistration.AllTasks 屬性,並在工作已經登錄時,將旗標設為 true。
var taskRegistered = false;
var exampleTaskName = "Example background task class name";
var background = Windows.ApplicationModel.Background;
var iter = background.BackgroundTaskRegistration.AllTasks.first();
while (iter.hasCurrent) {
var task = iter.current.value;
if (task.name === exampleTaskName) {
taskRegistered = true;
break;
}
iter.moveNext();
}
如果您的應用程式發現背景工作尚未登錄,可以呼叫 Windows.ApplicationModel.Background.BackgroundTaskBuilder.register 方法來登錄它。在對這個方法的呼叫中,您會包含背景工作 .js 檔案的名稱 (在我們的案例中為 examplebackgroundtask.js
) 和 PushNotificationTrigger 物件。
if (taskRegistered != true) {
var builder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();
var trigger = new Windows.ApplicationModel.Background.PushNotificationTrigger();
builder.name = exampleTaskName;
builder.taskEntryPoint = "js\\ExampleBackgroundTask.js";
builder.setTrigger(trigger);
var task = builder.register();
}
摘要
您現在應該了解撰寫背景工作類別與原始通知搭配使用的基本知識,其中包含如何從應用程式內登錄背景工作。您也應該了解如何更新應用程式資訊清單,Windows 才能讓應用程式登錄它的背景工作。
注意 您可以下載背景工作範例,在使用數種不同背景工作類型的完整、可靠 JavaScript 應用程式內容中查看這些程式碼範例及更多內容。