Windowsストアアプリでの通知ハブ利用について

2014年3月17日 | By TatsuakiSakai | Filed in: Micosoft Azure.

 

この記事は、【Windows Azureアドベントカレンダー 】の連動記事です。

 

Windowsストアアプリでは、2種類のプッシュ通知を利用可能であることは、既にご存知の方も多いのでは?と思います。

2種類の通知とは、Windows Azureモバイルサービスのプッシュを構成する方法と、サービス バス通知ハブを利用する方法です。

特定のアプリケーションだけで利用する通知である場合にはWindows Azureモバイルサービスを利用することで、簡単にプッシュ通知を利用することができます。

Windows Azureモバイルサービスのプッシュ通知機能は、バックエンドにWindows Azureモバイルサービスを利用した際に有効ですが、モバイルサービスを利用しない場合や、複数種類のアプリケーションに対して一斉通知を実施したい場合があります。

また、特定の種類の情報のみを受信するよう選択する機能を実現したい場合には、サービス バス通知ハブを利用する必要があります。

どの種類のお知らせを受信するかは、通知ハブにアプリを登録する時点(通常はアプリ起動時)に指定します。

そのため、起動後に受信したい通知の種類を選択することができません。

特に、Windowsストアアプリでは通知ハブへの登録をC#の場合ならApp.Xaml.cs内に記述する必要があります。

しかし、実際にオプションの選択はフォームや設定メニュー内で実行することが一般的です。

そのため、以下のようにしておくとアプリケーション内からも変更が可能です。

それでは、Windows ストアアプリに対して、特定の種別のみを選択して受信するような例を考えてみましょう。

以下のように宣言された通知ハブを想定してみましょう。

 

NotificationHub notificationHub;
public App()

{
  this.InitializeComponent();

   //通知ハブの初期化

  notificationHub = new  NotificationHub(“[yournotificationhubname]”,“[yourconnectionstring]”);

  //初期化終了

  this.Suspending += OnSuspending;

}

 

この通知ハブに対して、App.Xaml.cs内に、以下のPublicタスクを定義しておきます。

 

public async Task RefreshTags(IEnumerable<string> tags)

{

  var mychannel =

   await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();

  await notificationHub.UnregisterAllAsync(mychannel.Uri);

  await notificationHub.RegisterTemplateAsync(mychannel.Uri, BuildToastText02(), “[yournotification]”, tags);

}

 

この例ではToastText02という形式の通知テンプレートを別途定義してあり、その定義メソッドであるBuildToastText02を呼び出しています。


XmlDocument BuildToastText02()

{

  var template = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);

  var textNode = template.SelectSingleNode(“//text[@id=’1′]”) as XmlElement;

  if (textNode != null) textNode.InnerText = “$(caption)”;

  var textNode2 = template.SelectSingleNode(“//text[@id=’2′]”) as XmlElement;

  if (textNode2 != null) textNode2.InnerText = “$(msg)”;

   return template;

}

 

これでApp.Xaml.cs側の記述は完了です。

それでは、UX側でどのように変更するかを見てみましょう。

以下のように指定することで、タグ情報を更新可能です。

 

  App myapp = (App)App.Current;

  List<string> newTags = new List<string>{ “urgent”, “disaster”, “weather” };

  await myapp.RefreshTags(newTags);

 

この例では、直接stringのListを作成していますが、実際にはチェックボックス選択状態からListを作成したりすることで利用可能です。

ポイントとしては通知ハブに対してtagsをList<string>型で指定する必要がある点です。

これ以外は特に難しいことはありません。

 

 


Comments are closed here.