[3]アプリケーション名を選択する
サインインが完了すると、登録されているWindowsストアアプリ名が表示されます。ここでは、先ほど作成した「NotificationSample」を選択し、[次へ]ボタンをクリックします(図12)。
[4]アプリケーションをWindowsストアと関連付ける
最後に関連付けの確認ダイアログが表示されるので、[関連付け]ボタンをクリックして処理を完了します(図13)。関連付けされたデータは、自動的に「Package.appxmanifest」ファイルに追加されます。
サンプルアプリケーションの確認
では、サンプルアプリケーションを確認していきましょう。
[1]名前空間を確認する
概要で説明したとおり、クライアントアプリとプッシュ通知サービスを連携するためのチャネルを作成します。チャネルとは通信経路を意味しますが、ここではプッシュ通知の連携をするために、通知クライアントプラットフォームを経由してWindowsプッシュ通知サービスにチャネルのURIを要求しています。
App.xaml.csを開いてください。リスト1は、プッシュ通知に必要なクラス群を提供するための名前空間です。Windowsストアアプリとしてプロジェクトを作成すると、すでに参照設定は行われているため追加設定は必要ありません。
// プッシュ通知用 名前空間 using Windows.Networking.PushNotifications;
[2]プッシュ通知チャネルを設定する
次にプッシュ通知のチャネル作成部分を確認します(リスト2)。
/// <summary> /// プッシュ通知チャネル プロパティ /// </summary> public static PushNotificationChannel CurrentChannel { get; private set; } ① /// <summary> /// プッシュ通知チャネルの取得 /// </summary> private async void AcquirePushChannel() { CurrentChannel = ② await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync(); } protected override void OnLaunched(LaunchActivatedEventArgs args) { ...省略... // プッシュ通知チャネルの取得 AcquirePushChannel(); ③ }
プッシュ通知を利用するために、PushNotificationChannelクラスを使用します。
①は外部クラスから参照できるよう、「PushNotificationChannel」のプロパティ設定を行っています。②では、「PushNotificationChannelManager」クラスの「CreatePushNotificationChannelForApplicationAsync」メソッドを非同期で呼び出し、インスタンスを取得します。設定を行う「AcquirePushChannel」メソッドは、ストアアプリ正常に起動された場合に呼び出される「OnLaunched」メソッド内の③から呼び出し、初期化します。
[3]データクラスを確認する
データクラスを確認するために、リスト3を開きます。
/// <summary> /// メッセージクラス /// </summary> public class Message { public int Id { get; set; } /// <summary> /// メッセージ本文 /// </summary> [DataMember(Name = "text")] public string Text { get; set; } ① /// <summary> /// プッシュ通知用チャネル /// </summary> [DataMember(Name = "channel")] public string Channel { get; set; } ② }
①はメッセージを格納するためのプロパティです。②はプッシュ通知を利用するためのURIを格納するプロパティです。
[4]データを送信する
データクラスで定義したchannelプロパティは、リスト4のデータ送信時に格納します。
private void ButtonSend_Click(object sender, RoutedEventArgs e) { var message = new Message { Text = TextInput.Text, Channel = App.CurrentChannel.Uri }; SendMessage(message); }
Textプロパティにはテキストボックスに入力されたメッセージを格納し、Channelプロパティには、チャネルクラスから取得したURIを格納しモバイルサービスに送信します。
クライアント側のプッシュ通知にかかわる部分は以上です。