Azure Notification Hubs を使用してクロスプラットフォーム通知を送信する
このチュートリアルは、前のチュートリアル「 Azure Notification Hubs を使用して特定のユーザーに通知を送信する」に基づいています。 このチュートリアルでは、特定の認証済みユーザーに登録されているすべてのデバイスにプッシュ通知を送信する方法について説明します。 この方法では、サポートされている各クライアント プラットフォームに通知を送信するために複数の要求が必要です。 Azure Notification Hubs ではテンプレートがサポートされており、特定のデバイスで通知を受信する方法を指定できます。 このメソッドは、クロスプラットフォーム通知の送信を簡略化します。
この記事では、テンプレートを利用して、すべてのプラットフォームを対象とする通知を送信する方法について説明します。 この記事では、1 つの要求を使用してプラットフォームに依存しない通知を送信します。 テンプレートの詳細については、「 Notification Hubs の概要」を参照してください。
重要
Windows Phone プロジェクト 8.1 以前は、Visual Studio 2019 ではサポートされていません。 詳細については、 Visual Studio 2019 プラットフォームのターゲット設定と互換性に関するページを参照してください。
注
Notification Hubs を使用すると、デバイスは同じタグを使用して複数のテンプレートを登録できます。 この場合、タグを対象とする受信メッセージにより、テンプレートごとに 1 つずつ、複数の通知がデバイスに配信されます。 このプロセスを使用すると、バッジや Windows ストア アプリのトースト通知の両方など、複数の視覚的通知に同じメッセージを表示できます。
テンプレートを使用してクロスプラットフォーム通知を送信する
注
Microsoft プッシュ通知サービス (MPNS) は非推奨となり、サポートされなくなりました。
このセクションでは、「 Azure Notification Hubs を使用して特定のユーザーに通知を送信する 」チュートリアルで作成したサンプル コードを使用します。 完全なサンプルは GitHub からダウンロードできます。
テンプレートを使用してクロスプラットフォーム通知を送信するには、次の操作を行います。
ソリューション エクスプローラーの Visual Studio で Controllers フォルダーを展開し、RegisterController.cs ファイルを開きます。
新しい登録を作成する
Put
メソッド内のコード ブロックを見つけ、switch
のコンテンツを次のコードに置き換えます。switch (deviceUpdate.Platform) { case "mpns": var toastTemplate = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<wp:Notification xmlns:wp=\"WPNotification\">" + "<wp:Toast>" + "<wp:Text1>$(message)</wp:Text1>" + "</wp:Toast> " + "</wp:Notification>"; registration = new MpnsTemplateRegistrationDescription(deviceUpdate.Handle, toastTemplate); break; case "wns": toastTemplate = @"<toast><visual><binding template=""ToastText01""><text id=""1"">$(message)</text></binding></visual></toast>"; registration = new WindowsTemplateRegistrationDescription(deviceUpdate.Handle, toastTemplate); break; case "apns": var alertTemplate = "{\"aps\":{\"alert\":\"$(message)\"}}"; registration = new AppleTemplateRegistrationDescription(deviceUpdate.Handle, alertTemplate); break; case "fcm": var messageTemplate = "{\"data\":{\"message\":\"$(message)\"}}"; registration = new FcmTemplateRegistrationDescription(deviceUpdate.Handle, messageTemplate); break; default: throw new HttpResponseException(HttpStatusCode.BadRequest); }
このコードでは、プラットフォーム固有のメソッドを呼び出して、ネイティブ登録ではなくテンプレート登録を作成します。 テンプレート登録はネイティブ登録から派生するため、既存の登録を変更する必要はありません。
ソリューション エクスプローラーの Controllers フォルダーで、NotificationsController.cs ファイルを開きます。
Post
メソッドを次のコードに置き換えます。public async Task<HttpResponseMessage> Post() { var user = HttpContext.Current.User.Identity.Name; var userTag = "username:" + user; var notification = new Dictionary<string, string> { { "message", "Hello, " + user } }; await Notifications.Instance.Hub.SendTemplateNotificationAsync(notification, userTag); return Request.CreateResponse(HttpStatusCode.OK); }
このコードは、すべてのプラットフォームに同時に通知を送信します。 ネイティブ ペイロードは指定しません。 Notification Hubs は、登録されたテンプレートで指定されているように、指定されたタグ値を持つすべてのデバイスに正しいペイロードをビルドして配信します。
Web API プロジェクトを再公開します。
クライアント アプリをもう一度実行して、登録が成功したことを確認します。
必要に応じて、クライアント アプリを 2 台目のデバイスに展開し、アプリを実行します。 各デバイスに通知が表示されます。
次のステップ
このチュートリアルを完了したので、Notification Hubs とテンプレートの詳細については、次の記事を参照してください。
- テンプレートを使用する別のシナリオについては、「 ユニバーサル Windows プラットフォーム アプリケーションを実行している特定の Windows デバイスへのプッシュ通知 」チュートリアルを参照してください。
- テンプレートの詳細については、「 Notification Hubs の概要」を参照してください。