共用方式為


快速入門:建立和登錄原始通知背景工作 (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 應用程式內容中查看這些程式碼範例及更多內容。

 

相關主題

原始通知範例

原始通知概觀

原始通知的指導方針和檢查清單

快速入門:攔截執行中應用程式的推播通知

RawNotification