Azure Functions の Azure Notification Hubs 出力バインド
この記事では、Azure Functions で Azure Notification Hubs のバインドを使用してプッシュ通知を送信する方法について説明します。 Azure Functions は、Notification Hubs の出力バインドをサポートします。
使用するプラットフォーム通知サービス (PNS) の Notification Hubs を構成する必要があります。 Notification Hubs からクライアント アプリでプッシュ通知を取得する方法の詳細については、「 Quickstart: 通知ハブでプッシュ通知を設定する」を参照してください。
重要
Google では Google Cloud Messaging (GCM) は非推奨となり、Firebase Cloud Messaging (FCM) が推奨されます。 ただし、Notification Hubs の出力バインドは FCM をサポートしていません。 FCM を使用して通知を送信するには、Firebase API を関数に直接使用するか、テンプレート通知を使用します。
パッケージ: 関数 1.x
重要
Azure Functions Runtime のバージョン 1.x のサポートは 2026 年 9 月 14 日に終了します。 完全なサポートのために、アプリをバージョン 4.x に移行することを強くお勧めします。
Notification Hubs バインディングは Microsoft.Azure.WebJobs.Extensions.NotificationHubs NuGet パッケージ、バージョン 1.x で提供されます。 パッケージのソース コードは、azure-webjobs-sdk-extensions GitHub リポジトリにあります。
次の表に、各開発環境で出力バインドのサポートを追加する方法を示します。
開発環境 | Functions 1.x でサポートを追加するには |
---|---|
ローカル開発: C# クラス ライブラリ | パッケージをインストールする |
ローカル開発: C# スクリプト、JavaScript、F# | 自動 |
Portal 開発 | 自動 |
パッケージ: 関数 2.x 以降
出力バインドは、Functions 2.x 以降では使用できません。
テンプレートの例:
送信できる通知は、ネイティブ通知またはテンプレート通知です。 ネイティブ通知は、出力バインディングの platform
プロパティで構成されているように、特定のクライアント プラットフォームを対象とします。 テンプレート通知は、複数のプラットフォームを対象として使用できます。
各言語のテンプレートの例:
C# スクリプト テンプレートの例: out パラメーター
次の例では、テンプレートにmessage
プレースホルダーを含むテンプレート登録の通知を送信します。
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
public static void Run(string myQueueItem, out IDictionary<string, string> notification, TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
notification = GetTemplateProperties(myQueueItem);
}
private static IDictionary<string, string> GetTemplateProperties(string message)
{
Dictionary<string, string> templateProperties = new Dictionary<string, string>();
templateProperties["message"] = message;
return templateProperties;
}
C# スクリプト テンプレートの例: 非同期
非同期コードを使用している場合、out パラメーターは許可されません。 この場合は、 IAsyncCollector
を使用してテンプレート通知を返します。 次のコードは、前の例の非同期の例です。
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
public static async Task Run(string myQueueItem, IAsyncCollector<IDictionary<string,string>> notification, TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
log.Info($"Sending Template Notification to Notification Hub");
await notification.AddAsync(GetTemplateProperties(myQueueItem));
}
private static IDictionary<string, string> GetTemplateProperties(string message)
{
Dictionary<string, string> templateProperties = new Dictionary<string, string>();
templateProperties["user"] = "A new user wants to be added : " + message;
return templateProperties;
}
C# スクリプト テンプレートの例: JSON
この例では、有効な JSON 文字列を使用してテンプレートにmessage
プレースホルダーを含むテンプレート登録の通知を送信します。
using System;
public static void Run(string myQueueItem, out string notification, TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
notification = "{\"message\":\"Hello from C#. Processed a queue item!\"}";
}
C# スクリプト テンプレートの例: ライブラリの種類
この例では、 Microsoft Azure Notification Hubs ライブラリで定義されている型を使用する方法を示します。
#r "Microsoft.Azure.NotificationHubs"
using System;
using System.Threading.Tasks;
using Microsoft.Azure.NotificationHubs;
public static void Run(string myQueueItem, out Notification notification, TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
notification = GetTemplateNotification(myQueueItem);
}
private static TemplateNotification GetTemplateNotification(string message)
{
Dictionary<string, string> templateProperties = new Dictionary<string, string>();
templateProperties["message"] = message;
return new TemplateNotification(templateProperties);
}
F# テンプレートの例
この例では、location
とmessage
を含むテンプレート登録の通知を送信します。
let Run(myTimer: TimerInfo, notification: byref<IDictionary<string, string>>) =
notification = dict [("location", "Redmond"); ("message", "Hello from F#!")]
JavaScript テンプレートの例
この例では、location
とmessage
を含むテンプレート登録の通知を送信します。
module.exports = async function (context, myTimer) {
var timeStamp = new Date().toISOString();
if (myTimer.IsPastDue)
{
context.log('Node.js is running late!');
}
context.log('Node.js timer trigger function ran!', timeStamp);
context.bindings.notification = {
location: "Redmond",
message: "Hello from Node!"
};
};
例: APNS ネイティブ
この C# スクリプトの例では、ネイティブの Apple Push Notification Service (APNS) 通知を送信する方法を示します。
#r "Microsoft.Azure.NotificationHubs"
#r "Newtonsoft.Json"
using System;
using Microsoft.Azure.NotificationHubs;
using Newtonsoft.Json;
public static async Task Run(string myQueueItem, IAsyncCollector<Notification> notification, TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
// In this example, the queue item is a new user to be processed in the form of a JSON string with
// a "name" value.
//
// The JSON format for a native Apple Push Notification Service (APNS) notification is:
// { "aps": { "alert": "notification message" }}
log.LogInformation($"Sending APNS notification of a new user");
dynamic user = JsonConvert.DeserializeObject(myQueueItem);
string apnsNotificationPayload = "{\"aps\": {\"alert\": \"A new user wants to be added (" +
user.name + ")\" }}";
log.LogInformation($"{apnsNotificationPayload}");
await notification.AddAsync(new AppleNotification(apnsNotificationPayload));
}
例: WNS ネイティブ
この C# スクリプトの例では、 Microsoft Azure Notification Hubs ライブラリ で定義されている型を使用して、ネイティブ Windows プッシュ通知サービス (WNS) トースト通知を送信する方法を示します。
#r "Microsoft.Azure.NotificationHubs"
#r "Newtonsoft.Json"
using System;
using Microsoft.Azure.NotificationHubs;
using Newtonsoft.Json;
public static async Task Run(string myQueueItem, IAsyncCollector<Notification> notification, TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
// In this example, the queue item is a new user to be processed in the form of a JSON string with
// a "name" value.
//
// The XML format for a native WNS toast notification is ...
// <?xml version="1.0" encoding="utf-8"?>
// <toast>
// <visual>
// <binding template="ToastText01">
// <text id="1">notification message</text>
// </binding>
// </visual>
// </toast>
log.Info($"Sending WNS toast notification of a new user");
dynamic user = JsonConvert.DeserializeObject(myQueueItem);
string wnsNotificationPayload = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<toast><visual><binding template=\"ToastText01\">" +
"<text id=\"1\">" +
"A new user wants to be added (" + user.name + ")" +
"</text>" +
"</binding></visual></toast>";
log.Info($"{wnsNotificationPayload}");
await notification.AddAsync(new WindowsNotification(wnsNotificationPayload));
}
属性
C# クラス ライブラリでは、NotificationHub 属性を使用します。
属性のコンストラクターパラメーターとプロパティについては、「 Configuration 」セクションで説明します。
構成
次の表に、 function.json ファイルで設定したバインド構成プロパティと NotificationHub
属性を示します。
function.json のプロパティ | 属性のプロパティ | 説明 |
---|---|---|
type | 該当なし | notificationHub に設定します。 |
direction | 該当なし | out に設定します。 |
name | 該当なし | 通知ハブ メッセージの関数コードで使用される変数名。 |
tagExpression | TagExpression | タグ式を使用すると、タグ式に一致する通知を受信するように登録されている一連のデバイスに通知を配信するように指定できます。 詳細については、「ルーティングとタグ式」を参照してください。 |
hubName | HubName | Azure portal の通知ハブ リソースの名前。 |
connection | ConnectionStringSetting | Notification Hubs 接続文字列を含むアプリ設定の名前。 接続文字列を通知ハブの DefaultFullSharedAccessSignature 値に設定します。 詳細については、「 Connection 文字列のセットアップ」を参照してください。 |
platform | プラットフォーム | platform プロパティは、通知の対象となるクライアント プラットフォームを示します。 既定では、プラットフォームのプロパティが出力バインドから省略されている場合、テンプレート通知は、Azure 通知ハブで構成されている任意のプラットフォームを対象として使用できます。 テンプレートを使用して Azure Notification Hub でクロスプラットフォーム通知を送信する方法の詳細については、「 Notification Hubs テンプレート」を参照してください。 platformが設定されている場合は、次のいずれかの値である必要があります。
|
ローカルで開発する場合は、Values
コレクション内の local.settings.json ファイルにアプリケーション設定を追加します。
function.json ファイルの例
function.json ファイル内の Notification Hubs バインドの例を次に示します。
{
"bindings": [
{
"type": "notificationHub",
"direction": "out",
"name": "notification",
"tagExpression": "",
"hubName": "my-notification-hub",
"connection": "MyHubConnectionString",
"platform": "apns"
}
],
"disabled": false
}
接続文字列の設定
通知ハブの出力バインドを使用するには、ハブの接続文字列を設定する必要があります。 既存の通知ハブを選択するか、Azure portal の Integrate タブから新しい通知ハブを作成できます。 接続文字列を手動で構成することもできます。
既存の通知ハブに対する接続文字列を構成するには:
Azure Portal で通知ハブに移動し、[アクセスポリシー] を選択して、[DefaultFullSharedAccessSignature] ポリシーの横にあるコピー ボタンを選択します。
DefaultFullSharedAccessSignature ポリシーの接続文字列が通知ハブにコピーされます。 この接続文字列を使用して、関数からハブに通知メッセージを送信できます。
Azure portal で関数アプリに移動し、 Settings を展開し、 Environment 変数を選択します。
[ App 設定 タブで、 + Add を選択して、 MyHubConnectionString などのキーを追加。 このアプリ設定の Name は、 function.json または .NET 属性の出力バインド接続設定です。 詳細については、構成に関するページを参照してください。
値として、通知ハブからコピーしたDefaultFullSharedAccessSignature 接続文字列を貼り付け、Apply を選択します。
ローカルで開発する場合は、Values
コレクション内の local.settings.json ファイルにアプリケーション設定を追加します。
例外とリターン コード
バインド | リファレンス |
---|---|
Notification Hub | 運用ガイド |