タイルとバッジのライフサイクル実装(Azure)編

「タイルとバッジのライフサイクル実装(クライアント)編」で、セカンダリ・タイルをアプリケーションバーの[ピン止め]ボタンから作成する処理の解説を行いました。ここでは、Microsoft Azureからの通知を受け取る方法を解説します。サンプルを動かすためには、ここでの解説に則って、Micorosoft Azure上で各種定義を行う必要があります。公式サンプルやドキュメント「Azure Notification Hubs によるユーザーへの通知」、「通知ハブの使用」も併せて参考にしてください。

サンプル・ソリューション

・開発環境

サンプル・ソリューションはユニバーサル・アプリで作成してあります。ただし、ここでの解説の内容は非ユニバーサル・アプリにも応用ができる解説を行っています。

Windows Store account
Azure account (get free trial account)
Visual Studio 2012 any editions(Universal App: Visual Studio 2013 Up2)

※Microsoft AzureやVisual Studioは評価版が用意されています。

・全体の構成

ストアアプリがアプリケーション提供者から通知を受ける仕組みは以下の通りです。

1.ストアアプリは、起動時にMicrosoft Azure Notifications Hubに接続し、チャンネルを取得する。ストアアプリが稼働している端末は、取得したチャンネルを使って、通知の待ち受け状態であることをMicrosoft Azure Notifications Hubに伝える。この際、Microsoft Azure Notifications Hubにチャンネルとタグを一緒に登録することで、どのような通知であれば配信してほしいのかという情報を設定することができる。

出典:Microsoft News Center – Lumia Press Materials, Microsoft Surface Newsroom: Image Gallery

2.チャンネルとタグを受け取ったMicrosoft Azure Notifications Hubはそれらを対にして管理し、アプリケーション開発者からの通知の発行を待つ。

Channel管理のイメージ

3.アプリケーション開発者は、通知の内容とタグを指定してMicrosoft Azure Notifications Hubに通知を発行する。アプリケーション開発者は、Microsoft Azure Service Busを使ってMicrosoft Azure Notifications Hubに通知を発行するため、Microsoft Azure Service Busの名前空間で管理されているMicrosoft Azure Notifications Hubの名前を指定して通知を発行する。


4.通知の発行を受けたMicrosoft Azure Notifications Hubは、接続文字列を使って接続してきた端末のチャンネルにブロードキャストで順次通知していく。この接続文字列は、Liveサービスにストアアプリを登録することで得られるクライアント・シークレットとストアアプリのパッケージSIDの組み合わせによってMicrosoft Azure Notifications Hubが管理している接続文字列であり、通知すべきチャンネルを特定できる。それらのチャンネルは、アプリケーション開発者による通知の発行時に指定されたタグにより絞り込まれる。タグを指定していない通知は、すべてのチャンネルに発行される。


5.このリストは、通知待ち受け中のアクティブな端末を意味しており、管理できるチャンネル数は無制限(無料枠は500)。これらの端末に通知を発行できる数は月に100万プッシュまで無料で発行することができる。また、タグとチャンネルは90日で自動的に消えるため、継続的なサポートが必要な場合、アプリケーション起動時に行われるチャンネルとタグの登録について、それらをデバイスに保存しておくなど、何らかのユーザー・サポート機能を要する。

出典:Microsoft News Center – Lumia Press Materials, Microsoft Surface Newsroom: Image Gallery, Microsoft announcement – OneDrive is comming soon

この一連の流れを形成するために必要な作業として、以下があります。

作業の対象 以下で解説している内容
クライアントアプリでの作業 Devセンターへストアアプリを登録(本稿で解説)
待ち受け状態にするため接続文字列を使って接続、チャンネルの取得(本稿で解説)
Microsoft Azure Notifications Hubへチャンネルの登録(本稿で解説)
継続的なサポートのため、タグ、チャンネルを管理(タイルとバッジのライフサイクル運用(タグの管理)編で解説)
Liveサービスでの作業 Devセンターへ登録したストアアプリをLiveサービスへ登録(本稿で解説)
Microsoft Azureでの作業 Microsoft Azure Service Busの名前空間の作成(本稿で解説)
Microsoft Azure Notifications Hub作成(本稿で解説)
名前空間へMicrosoft Azure Notifications Hubを定義(本稿で解説)
Liveサービスのクライアント・シークレットとストアアプリのパッケージSIDの登録(本稿で解説)
通知発行アプリの作業 Microsoft Azure Notifications Hubへの通知発行処理の作成(タイルとバッジのライフサイクル運用(Microsoft Azure Mobile Service)編で解説)
通知の内容とタグを指定して発行(タイルとバッジのライフサイクル運用(Microsoft Azure Mobile Service)編で解説)

・ストアアプリ-Devセンター-Liveサービス-通知ハブの連携

ストアアプリはユニバーサルアプリのテンプレートを使って作成し、プロジェクトを右クリックして[ストア]メニューから[アプリケーションとストアを関連付ける]を選び「Devセンターへストアアプリを登録」することができます。Devセンターで作成(予約)した名前を選ぶか、新規に名前を登録することができます。

続いて「Devセンターへ登録したストアアプリをLiveサービスへ登録」するために、Devセンターにログインしストアアプリ名を選択したら、サービスからLiveサービスの登録を選択します。

Liveサービスへ移動するので、そこのパッケージSIDとクライアント・シークレットをMicrosoft Azure Notifications Hubに登録します。一方、Microsoft Azure Notifications Hubを作成する作業に移り、そこでこの2つの値を登録することになります。

Microsoft Azureポータルにログインし、Service Busで新規に名前空間を登録します。既存のソリューションの拡張として新規に通知ハブを作成する場合は、該当の名前空間を使います。

通知ハブを作成する名前空間が選択された状態で[新規]ボタンを選択し、[通知ハブ]を選択します。

続いて[簡易作成]を選択し、それぞれの項目に入力します。

通知ハブの[構成]タブを選んで[Windows設定]にパッケージSIDとクライアント・シークレットを設定することで、Microsoft Azureでの作業「Microsoft Azure Service Busの名前空間の作成」「Microsoft Azure Notifications Hub作成」「名前空間へMicrosoft Azure Notifications Hubを定義」「Liveサービスのクライアント・シークレットとストアアプリのパッケージSIDの登録」を完了します。

・通知の受信

ストアアプリの作成に戻って、「待ち受け状態にするため接続文字列を使って接続、チャンネルの取得」「Microsoft Azure Notifications Hubへチャンネルの登録」を実装します。Microsoft Azure Notifications Hubとの通知にMicrosoft Azure Mobile Serviceを使う方法は「タイルとバッジのライフサイクル運用(Microsoft Azure Mobile Service)編」で解説しています。ここでは受信部分を作成して導通試験を行うところまでを解説します。

まず、Microsoft Azure Notifications Hubと通信するためにNugetでWindowsAzure.Messaging.Managedをインストールします。ユニバーサル・アプリの場合、SharedにあるApp.xaml.csに実装しますので、Windows側、Phone側の両方のプロジェクトにインストールします。アプリケーション起動時にチャンネルを開く場合は、App.xaml.csのOnLaunchedイベント・ハンドラの最後にInitNotificationsAsync();を追加して、チャンネルを開くメソッドを呼び出すようにします。

チャンネルを開くメソッドInitNotificationsAsyncでは、チャンネルオブジェクトの生成、接続文字列と通知ハブ名を指定した接続オブジェクトの生成、生成した接続オブジェクトにチャンネルオブジェクトを指定して登録という3つの作業を行います。これにより、永続化されたエンドポイントが通知ハブ内に生成されます。この際タグを設定できますが、「継続的なサポートのため、タグ、チャンネルを管理」については「タイルとバッジのライフサイクル運用(Microsoft Azure Mobile Service)編」で解説しています。

using Windows.Networking.PushNotifications;
using Microsoft.WindowsAzure.Messaging;
using Windows.UI.Popups;
private async void InitNotificationsAsync()
{
    var channel = await PushNotificationChannelManager
                                .CreatePushNotificationChannelForApplicationAsync();
    var hub = new NotificationHub("hub name", "connection string with listen access");
    var result = await hub.RegisterNativeAsync(channel.Uri);
    if (result.RegistrationId != null)
    {
        var dialog =
            new MessageDialog("Registration successful: " + result.RegistrationId);
        dialog.Commands.Add(new UICommand("OK"));
        await dialog.ShowAsync();
    }
}

通知ハブを使うストアアプリはシミュレーターでは実行できませんので、Visual Studioのデバッグをローカルコンピューターで行うようにします。チャンネルが開くと登録IDがダイアログで確認できます

・通知の発行

通知の発行はローカルのコマンド・アプリケーションから行うことができます。ただし、保守性や運用を考慮してクラウド上から発行を行うのが一般的です。ここでは導通試験のため最も簡単な通知の発行を解説していますが、通知発行をクラウドから行う方法として「Microsoft Azure Notifications Hubへの通知発行処理の作成」「通知の内容とタグを指定して発行」を「タイルとバッジのライフサイクル運用(Microsoft Azure Mobile Service)編」で解説していますので参照してください。

最も簡単に通知の発行を行うには、Service Bus Explorerを使うことをお勧めします。ダウンロードして解凍したらbinの中のServiceBusExplorer.exeを起動します。

起動後、[File]メニューの[Connect]を選択し、[Service Bus Namespaces]で[Enter connection string]を選択します。

Azureポータルにログインし、の[Service Bus]から名前空間を選んで[接続情報]を開き、内容をコピーします。

Service Bus Explorerに戻って[Connection Settings]に貼り付けて、[OK]を選択すると接続できます。

接続したら通知ハブを選択して、Windowsタブをクリックします。

リストから、さまざまなテンプレートを選択して導通試験ができます。MSDNのトースト テンプレート カタログを参考にService Bus Explorerを使って、実際のトーストの動きを確認することができます。

About takao