由推播通知精靈產生的程式碼

Applies to Windows and Windows Phone

您可以藉由 Visual Studio 中的精靈,從利用 Azure 行動服務建立的行動服務產生推播通知。Visual Studio 精靈會產生程式碼,協助您開始使用。這個主題說明精靈如何修改您的專案、所產生的程式碼如何作用、如何使用此程式碼,以及如何進一步充分利用推播通知。請參閱 Windows 推播通知服務 (WNS) 概觀

精靈如何修改您的專案

推播通知精靈會透過下列方式修改您的專案:

  • 新增對行動服務受管理用戶端 (MobileServicesManagedClient.dll) 的參考。不適用於 JavaScript 專案。
  • 根據服務在子資料夾新增檔案,將檔案命名為 push.register.cs、push.register.vb、push.register.cpp 或 push.register.js。
  • 在行動服務的資料庫伺服器上建立通道表。此表格包含將推播通知傳送到應用程式執行個體所需的資訊。
  • 建立四個函式的指令碼:delete、insert、read 和 update。
  • 使用自訂 API (notifyallusers.js) 建立一個指令碼,將推播通知傳送到所有用戶端。
  • 將宣告加入您的 App.xaml.cs、App.xaml.vb 或 App.xaml.cpp 檔案,或將宣告加入 JavaScript 專案的新檔案 service.js。 這個宣告會宣告 MobileServiceClient 物件,其中包含連接到行動服務時所需的資訊。您可以使用 App.MyServiceNameClient 名稱,從應用程式的任一頁面存取這個名為 MyServiceNameClient 的 MobileServiceClient 物件。

services.js 檔案包含下列程式碼:


// http://go.microsoft.com/fwlink/?LinkID=290993&clcid=0x409
var <mobile-service-name>Client = new Microsoft.WindowsAzure.MobileServices.MobileServiceClient(
                "https://<mobile-service-name>.azure-mobile.net/",
                "<your client secret>");

推播通知的登錄

您可能不需要修改 push.register.* 中的程式碼,但這麼做有助於了解它的作用。當應用程式啟動時,程式碼會建立 WNS 通道,並透過它的統一資源識別元 (URI) 和已安裝應用程式的 InstallationId 來參考它。URI 參考的是通道而不是行動服務,InstallationId 則是應用程式特定硬體識別碼 (ASHWID),用來唯一識別使用者硬體上的已安裝應用程式執行個體。請參閱使用應用程式特定硬體識別碼 (ASHWID) 實作每個裝置的應用程式邏輯的指導。這項資訊已插入精靈在資料庫伺服器上建立的通道表。

Windows 市集會追蹤已安裝應用程式的執行個體,並提供推播通知通道。Windows 市集只需要加密的套件權杖,亦即 InstallationId (用來參考使用者硬體上特定的已安裝應用程式執行個體)。請參閱 PushNotificationChannelManager 類別



(function () {
    "use strict";

    var app = WinJS.Application;
    var activation = Windows.ApplicationModel.Activation;

    app.addEventListener("activated", function (args) {
        if (args.detail.kind == activation.ActivationKind.launch) {
            Windows.Networking.PushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync()
                .then(function (channel) {
                    mymobileserviceclient1234Client.push.registerNative(channel.Uri, new Array("tag1", "tag2"))
                    return mymobileservice1234Client.push.registerNative(channel.uri);
                })
                .done(function (registration) {
                    return mymobileservice1234Client.invokeApi("notifyAllUsers");
                }, function (error) {
                    // Error

                });
        }
    });
})();


伺服器端指令碼

發生 delete、insert、read 或 update 操作時,會執行伺服器端指令碼。指令碼不會實作這些操作,但是從用戶端呼叫 Windows Mobile REST API 觸發這些事件時,會執行指令碼。然後指令碼會呼叫 request.execute 或 request.respond 向呼叫內容發出回應,將控制權傳遞給操作本身。請參閱 Microsoft Azure 行動服務 REST API 參考

伺服器端指令碼提供各種不同函式。請參閱 Microsoft Azure 行動服務伺服器指令碼。如需所有可用函式的參考,請參閱行動服務伺服器指令碼參考

系統也會在 notifyallusers.js 中建立下列自訂的 API 程式碼:



exports.post = function(request, response) {
    response.send(statusCodes.OK,{ message : 'Hello World!' })
    
    // The following call is for illustration purpose only
    // The call and function body should be moved to a script in your app
    // where you want to send a notification
    sendNotifications(request);
};

// The following code should be moved to appropriate script in your app where notification is sent
function sendNotifications(request) {
    var payload = '<?xml version="1.0" encoding="utf-8"?><toast><visual><binding template="ToastText01">' +
        '<text id="1">Sample Toast</text></binding></visual></toast>';
    var push = request.service.push; 
    push.wns.send(null,
        payload,
        'wns/toast', {
            success: function (pushResponse) {
                console.log("Sent push:", pushResponse);
            }
        });
}


sendNotifications 函式會以快顯通知的方式傳送單一通知。您也可以使用其他類型的推播通知。

提示  如需如何在編輯指令碼時取得協助的詳細資訊,請參閱針對伺服器端 JavaScript 啟用 IntelliSense

推播通知類型

Windows 可支援推播通知以外的通知。如需有關通知的一般資訊,請參閱傳遞排程、定期及推播通知

快顯通知的使用方式非常簡單,您可以檢閱通道表上的 Insert.js 程式碼中為您產生的範例。如果您計劃使用磚或徽章通知,必須為磚和徽章建立 XML 範本,也必須指定範本中的封裝資訊編碼方式。請參閱使用磚、徽章以及快顯通知

因為 Windows 會回應推播通知,所以能在應用程式未執行時處理大部分的這類通知。例如,即使本機郵件應用程式並未執行,推播通知也能讓使用者得知有新的郵件訊息。Windows 處理快顯通知的方式是顯示訊息,例如文字訊息的第一行。Windows 處理磚或徽章通知的方式是更新應用程式的動態磚,以反映新郵件訊息數。 您可以利用這種方式提示應用程式使用者檢查新資訊。您的應用程式可以在執行時收到原始通知,而您可以使用這類通知將資料傳送給應用程式。如果應用程式未執行,您可以設定背景工作來監視推播通知。

您應該根據 Windows 市集應用程式的指導方針來使用推播通知,因為這些通知會用盡使用者的資源,而且過度使用也可能造成困擾。請參閱推播通知的指導方針和檢查清單

如果您利用推播通知更新動態磚,也應該遵循磚與徽章的指導方針和檢查清單中的指導方針。

後續步驟

使用 WNS

如果行動服務提供的彈性不足、您想要以 C# 或 Visual Basic 撰寫伺服器程式碼,或是您已經有雲端服務並想要從它傳送推播通知,則也可以直接呼叫 WNS。直接呼叫 WNS 時,可以從您自己的雲端服務 (例如,監視來自資料庫或其他 Web 服務之資料的工作者角色) 傳送推播通知。您的雲端服務必須透過 WNS 進行驗證,才能將推播通知傳送到您的應用程式。請參閱如何使用 Windows 推播通知服務進行驗證 (JavaScript)(C#/C++/VB)

您也可以在行動服務中執行排程工作,以傳送推播通知。請參閱在行動服務中排程週期性工作

警告  當您執行一次推播通知精靈之後,請勿因為要針對其他行動服務新增註冊碼,而再次執行精靈。針對單一專案多次執行精靈時,所產生的註冊碼會造成重複呼叫 CreatePushNotificationChannelForApplicationAsync 方法,進而導致發生執行階段例外狀況。如果您想要為多個行動服務註冊推播通知,請執行一次精靈,然後重新寫入註冊碼,以確保不會同時執行對 CreatePushNotificationChannelForApplicationAsync 的呼叫。例如,您可以將精靈在 push.register.* 中產生的註冊碼 (包括對 CreatePushNotificationChannelForApplicationAsync 的呼叫) 移到 OnLaunched 事件外以達到這個目的,但其中的細節將取決於您應用程式的架構。

相關主題

WNS 概觀
原始通知概觀
連線到 Microsoft Azure 行動服務 (JavaScript)
連線到 Microsoft Azure 行動服務 (C#/C++/VB)
快速入門:為行動服務加入推播通知 (JavaScript)
快速入門:為行動服務新增推播通知 (C#/C++/VB)

 

 

顯示:
© 2014 Microsoft