[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を格納しモバイルサービスに送信します。
クライアント側のプッシュ通知にかかわる部分は以上です。


