[Azure] 使用行動服務(Mobile Service)進行訊息的推播

[Azure] 使用行動服務(Mobile Service)進行訊息的推播

Microsoft Azure在網路上提供許多雲端的服務,相信很多人已經開始使用相關的內容,如網站、虛擬機器等等。

今天要為大家介紹的是,行動服務中的訊息推送的功能

啟用的步驟如下

1.建立行動服務

在Microsoft Azure中,建立一個新的行動服務

image

URL的部分,先命名為MobileAlert,然後建立一個新的SQL資料庫,將主機放在東亞,後端的部分先選擇.NET,當然啦,最重要的[進行進階推播設定]的功能要先打勾

image

通知中樞的部分,建立新的命名空間,並設定為MobileAlertHub

image

資料庫的部分,可以新增一個,或是使用現有資料庫都可以

image

2.下載執行範本

行動服務建立完成後,可以在行動服務的內容中看到剛剛建立好的項目

image

在行動服務的主頁面中,可以看到[開始使用]的內容中有[建立新的 Windows 或 Windows Phone 應用程式 ]以及[連接現有的 Windows 或 Windows Phone 應用程式 ]

image

點開後可以下載範例程式的內容,我們先下載建立新的應用程式的壓縮檔,語言的部分就先選擇[C#]

image

 

3.發布網站

下載下來的程式碼,基本上解完壓縮就可以直接開啟並執行,不過若是要將網站發布到Azure上,還需要更改一些資訊

image

點選[行動服務]==>[MobileAlert]==>[推送],然後點選通知中樞中的[mobilealerthub]

image

進入通知中樞的內容之後,點選[檢視連接字串]

image

[DefaultFullSharedAccessSignature]的連接字串記下來

image

將連接字串的內容置換到程式碼中,網站web.configconnectionStrings裡的[MS_NotificationHubConnectionString]的值

image

然後將appSettings[MS_NotificationHubName]的值,換成通知中樞的名稱[mobilealerthub]

image

開啟Controllers資料夾裡的[TodoItemController.cs]

並將下面的程式碼置換現有的程式function


public async Task<IHttpActionResult> PostTodoItem(TodoItem item)
{
    TodoItem current = await InsertAsync(item);

    // Create a WNS native toast.
    WindowsPushMessage message = new WindowsPushMessage();

    // Define the XML paylod for a WNS native toast notification 
    // that contains the text of the inserted item.
    message.XmlPayload = @"<?xml version=""1.0"" encoding=""utf-8""?>" +
                         @"<toast><visual><binding template=""ToastText01"">" +
                         @"<text id=""1"">" + item.Text + @"</text>" +
                         @"</binding></visual></toast>";
    try
    {
        var result = await Services.Push.SendAsync(message);
        Services.Log.Info(result.State.ToString());
    }
    catch (System.Exception ex)
    {
        Services.Log.Error(ex.Message, null, "Push.SendAsync Error");
    }
    return CreatedAtRoute("Tables", new { id = current.Id }, current);
}

網站的程式碼到這裡就已經準備完成了,接下來就是將這個網站發行到Azure上,讓行動裝置可以去連接

直接在網站上按右鍵,選擇[發行]

image

發行的目標,選擇[Microsoft Azure 行動服務]

image

接著選擇剛剛建好的行動服務[MobileAlert]

image

這邊就直接先按下一步就可以,除非有需要更改設定

image

確認沒有問題,就將網站發行至Azure上

image

看到這個畫面,代表行動服務已經發行成功了

image

 

4.設定Windows App以及Windows Phone App

雲端服務已經準備好之後,接下來就要開始準備Client Device的App了,在準備App前,請先到Submit an app頁面中,新增一個App,這個App可以不上架,但是因為要使用推播的功能,所以必須先建立一個App才能開始使用

image

App的名稱,我先取名叫做[MobileAlertApp]

image

接下來點選[Service]的內容

image

點選右方的[Live Services site]

image

在這個內容裡,有一些資訊要先記下來,要記的內容有[Package SID]以及[Client secret]

image

接著開啟Microsoft Azure中[行動服務]==>[MobileAlert]==>[推送]

將剛剛記下來的[Pacgake SID][Client secret]分別填入[用戶端機密][封裝SID]

image

因為是測試,所以[啟用未經驗證的推送通知]先將他打勾起來,更改完之後,記得按下儲存

image

接著回到Visual Studio之中,剛剛下載並開啟的程式碼

在Windows Phone App上,點選右鍵,並選擇[市集]==>[將應用程式與市集建立關聯]

image

選擇剛剛建立好的[MobileAlertApp],作為這份程式碼與市集App的關聯

image

當然,Windows App也可以用同一個App的應用程式名稱作為關聯

接下來,點選專案裡的[Package.appxmanifest],把[支援快顯通知]更改為[是]

image

最後一步,開啟[MobileAlert.Shared]的類別庫程式,將下面程式碼加到App.xaml.cs之中


using Windows.Networking.PushNotifications;
using Windows.UI.Popups;

private async void InitNotificationsAsync()
{
    // Request a push notification channel.
    var channel = await PushNotificationChannelManager
        .CreatePushNotificationChannelForApplicationAsync();

    // Register for notifications using the new channel
    System.Exception exception = null;
    try
    {
        await MobileService.GetPush().RegisterNativeAsync(channel.Uri);
    }
    catch (System.Exception ex)
    {
        exception = ex;
    }
    if (exception != null)
    {
        var dialog = new MessageDialog(exception.Message, "Registering Channel URI");
        dialog.Commands.Add(new UICommand("OK"));
        await dialog.ShowAsync();
    }
}

在OnLaunched的function之中,加上這一行


InitNotificationsAsync();

 

將App的程式按下F5並執行看看,這樣就可以順利接收到推送的訊息了

image

參考內容,如果覺得中文看不懂,想看英文的話可以看這裡

Add push notifications to your Mobile Services app