Azure Functions における Notification Hubs の出力バインドNotification Hubs output binding for Azure Functions

この記事では、Azure Functions で Azure Notification Hubs のバインドを使用してプッシュ通知を送信する方法について説明します。This article explains how to send push notifications by using Azure Notification Hubs bindings in Azure Functions. Azure Functions は、Notification Hubs の出力バインドをサポートします。Azure Functions supports output bindings for Notification Hubs.

Microsoft Azure Notification Hubs は、使用するプラットフォーム通知サービス (PNS) 用に構成する必要があります。Azure Notification Hubs must be configured for the Platform Notifications Service (PNS) you want to use. Notification Hubs からのプッシュ通知をクライアント アプリで取得するには、Notification Hubs の使用に関する記事を参照し、ページの上部にあるドロップダウン リストでターゲット クライアント プラットフォームを選択します。To learn how to get push notifications in your client app from Notification Hubs, see Getting started with Notification Hubs and select your target client platform from the drop-down list near the top of the page.

これは、Azure Functions の開発者向けリファレンス情報です。This is reference information for Azure Functions developers. Azure Functions を初めて使用する場合は、先に次のリソースを参照してください。If you're new to Azure Functions, start with the following resources:

パッケージ - Functions 1.xPackages - Functions 1.x

Notification Hubs バインディングは Microsoft.Azure.WebJobs.Extensions.NotificationHubs NuGet パッケージ、バージョン 1.x で提供されます。The Notification Hubs bindings are provided in the Microsoft.Azure.WebJobs.Extensions.NotificationHubs NuGet package, version 1.x. パッケージのソース コードは、azure-webjobs-sdk-extensions GitHub リポジトリにあります。Source code for the package is in the azure-webjobs-sdk-extensions GitHub repository.

次の表に、各開発環境でこのバインディングのサポートを追加する方法を示します。The following table tells how to add support for this binding in each development environment.

開発環境Development environment サポートを追加するバージョン:To add support in
Functions 1.xFunctions 1.x
ローカル開発 - C# クラス ライブラリLocal development - C# class library パッケージをインストールするInstall the package
ローカル開発で - C# スクリプト、JavaScript、F#Local development - C# script, JavaScript, F# 自動Automatic
Portal 開発Portal development 自動Automatic

パッケージ - Functions 2.xPackages - Functions 2.x

このバインディングは、Functions 2.x では使用できません。This binding is not available in Functions 2.x.

例 - テンプレートExample - template

送信できる通知は、ネイティブ通知またはテンプレート通知です。The notifications you send can be native notifications or template notifications. ネイティブ通知は、出力バインドの platform プロパティで構成された特定のクライアント プラットフォームを対象としています。Native notifications target a specific client platform as configured in the platform property of the output binding. テンプレート通知は、複数のプラットフォームを対象として使用できます。A template notification can be used to target multiple platforms.

言語固有の例をご覧ください。See the language-specific example:

C# スクリプト テンプレートの例 - out パラメーターC# script template example - out parameter

次の例では、テンプレートに message プレースホルダーを含むテンプレート登録の通知を送信します。This example sends a notification for a template registration that contains a message placeholder in the template.

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# スクリプト テンプレートの例 - 非同期C# script template example - asynchronous

非同期コードを使用している場合は、out パラメーターを使用できません。If you are using asynchronous code, out parameters are not allowed. その場合は、IAsyncCollector を使用してテンプレート通知を返します。In this case use IAsyncCollector to return your template notification. 次のコードでは、上記のコードの非同期の例を示します。The following code is an asynchronous example of the code above.

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# スクリプト テンプレートの例 - JSONC# script template example - JSON

次の例では、有効な JSON 文字列を使用して、テンプレートに message プレースホルダーを含むテンプレート登録の通知を送信します。This example sends a notification for a template registration that contains a message placeholder in the template using a valid JSON string.

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# スクリプト テンプレートの例 - ライブラリのタイプC# script template example - library types

次の例では、Microsoft Azure Notification Hubs ライブラリに定義されたタイプの使用方法を示します。This example shows how to use types defined in the Microsoft Azure Notification Hubs Library.

#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# テンプレートの例F# template example

次の例では、locationmessage を含むテンプレート登録の通知を送信します。This example sends a notification for a template registration that contains location and message.

let Run(myTimer: TimerInfo, notification: byref<IDictionary<string, string>>) =
    notification = dict [("location", "Redmond"); ("message", "Hello from F#!")]

JavaScript テンプレートの例JavaScript template example

次の例では、locationmessage を含むテンプレート登録の通知を送信します。This example sends a notification for a template registration that contains location and message.

module.exports = 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!"
    };
    context.done();
};

例 - APNS ネイティブExample - APNS native

この C# スクリプトの例では、ネイティブ APNS 通知を送信する方法を示します。This C# script example shows how to send a native APNS notification.

#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 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));        
}

例 - GCM ネイティブExample - GCM native

この C# スクリプトの例では、ネイティブ GCM 通知を送信する方法を示します。This C# script example shows how to send a native GCM notification.

#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 GCM notification is ...
    // { "data": { "message": "notification message" }}  

    log.Info($"Sending GCM notification of a new user");    
    dynamic user = JsonConvert.DeserializeObject(myQueueItem);    
    string gcmNotificationPayload = "{\"data\": {\"message\": \"A new user wants to be added (" + 
                                        user.name + ")\" }}";
    log.Info($"{gcmNotificationPayload}");
    await notification.AddAsync(new GcmNotification(gcmNotificationPayload));        
}

例 - WNS ネイティブExample - WNS native

この C# スクリプトの例では、Microsoft Azure Notification Hubs ライブラリに定義されたタイプを使用してネイティブの WNS トースト通知を送信する方法を示します。This C# script example shows how to use types defined in the Microsoft Azure Notification Hubs Library to send a native WNS toast notification.

#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));        
}

属性Attributes

C# クラス ライブラリでは、NotificationHub 属性を使用します。In C# class libraries, use the NotificationHub attribute.

この属性のコンストラクター パラメーターとプロパティについては、「構成」セクションをご覧ください。The attribute's constructor parameters and properties are described in the configuration section.

構成Configuration

次の表は、function.json ファイルと NotificationHub 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the NotificationHub attribute:

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
typetype 該当なしn/a "notificationHub" に設定する必要があります。Must be set to "notificationHub".
directiondirection 該当なしn/a "out" に設定する必要があります。Must be set to "out".
namename 該当なしn/a 通知ハブ メッセージの関数コードで使用される変数名。Variable name used in function code for the notification hub message.
tagExpressiontagExpression TagExpressionTagExpression タグ式。これにより、タグ式に一致する通知を受信するように登録した一連のデバイスに通知を配信するように指定できます。Tag expressions allow you to specify that notifications be delivered to a set of devices that have registered to receive notifications that match the tag expression. 詳細については、「ルーティングとタグ式」を参照してください。For more information, see Routing and tag expressions.
hubNamehubName HubNameHubName Azure Portal 内の通知ハブ リソースの名前。Name of the notification hub resource in the Azure portal.
connectionconnection ConnectionStringSettingConnectionStringSetting Notification Hubs 接続文字列を含むアプリ設定の名前。The name of an app setting that contains a Notification Hubs connection string. この接続文字列は、使用している通知ハブの DefaultFullSharedAccessSignature 値に設定される必要があります。The connection string must be set to the DefaultFullSharedAccessSignature value for your notification hub. この記事で後述する「接続文字列の設定」をご覧ください。See Connection string setup later in this article.
プラットフォームplatform プラットフォームPlatform platform プロパティは、通知の対象となるクライアント プラットフォームを示します。The platform property indicates the client platform your notification targets. 既定では、プラットフォームのプロパティが出力バインドから省略されている場合、テンプレート通知は、Azure 通知ハブで構成されている任意のプラットフォームを対象として使用できます。By default, if the platform property is omitted from the output binding, template notifications can be used to target any platform configured on the Azure Notification Hub. Azure Notification Hub でテンプレートを使用してクロスプラットフォームの通知を送信する一般的な方法の詳細については、「Templates (テンプレート)」を参照してください。For more information on using templates in general to send cross platform notifications with an Azure Notification Hub, see Templates. 設定されている場合、platform には、次のいずれかの値を指定する必要があります。When set, platform must be one of the following values:

ローカルで開発している場合、アプリ設定は local.settings.json ファイルに保存されます。When you're developing locally, app settings go into the local.settings.json file.

function.json ファイルの例function.json file example

次に示すのは、function.json ファイルでの Notification Hubs バインディングの例です。Here's an example of a Notification Hubs binding in a function.json file.

{
  "bindings": [
    {
      "type": "notificationHub",
      "direction": "out",
      "name": "notification",
      "tagExpression": "",
      "hubName": "my-notification-hub",
      "connection": "MyHubConnectionString",
      "platform": "gcm"
    }
  ],
  "disabled": false
}

接続文字列の設定Connection string setup

通知ハブの出力バインドを使用するには、ハブの接続文字列を設定する必要があります。To use a notification hub output binding, you must configure the connection string for the hub. 既存の通知ハブを選択するか、Azure ポータルの [統合] タブから新しいハブを作成できます。You can select an existing notification hub or create a new one right from the Integrate tab in the Azure portal. 接続文字列を手動で構成することもできます。You can also configure the connection string manually.

既存の通知ハブに対する接続文字列を構成するには:To configure the connection string to an existing notification hub:

  1. Azure Portal で通知ハブに移動し、[アクセスポリシー] を選択して、[DefaultFullSharedAccessSignature] ポリシーの横にあるコピー ボタンを選択します。Navigate to your notification hub in the Azure portal, choose Access policies, and select the copy button next to the DefaultFullSharedAccessSignature policy. これにより、DefaultFullSharedAccessSignature ポリシーの接続文字列が通知ハブにコピーされます。This copies the connection string for the DefaultFullSharedAccessSignature policy to your notification hub. この接続文字列を使用して、関数からハブに通知メッセージを送信できます。This connection string lets your function send notification messages to the hub. 通知ハブの接続文字列をコピーする
  2. Azure Portal の関数アプリに移動し、[アプリケーション設定] を選択し、MyHubConnectionString などのキーを追加します。次に、通知ハブ用にコピーされた DefaultFullSharedAccessSignature を値として貼り付けて、[保存] をクリックします。Navigate to your function app in the Azure portal, choose Application settings, add a key such as MyHubConnectionString, paste the copied DefaultFullSharedAccessSignature for your notification hub as the value, and then click Save.

このアプリケーション設定の名前が、function.json または .NET 属性の出力バインディング接続設定で使用されます。The name of this application setting is what goes in the output binding connection setting in function.json or the .NET attribute. この記事で前述した「構成」セクションをご覧ください。See the Configuration section earlier in this article.

ローカルで開発している場合、アプリ設定は local.settings.json ファイルに保存されます。When you're developing locally, app settings go into the local.settings.json file.

例外とリターン コードExceptions and return codes

バインドBinding リファレンスReference
Notification HubNotification Hub 運用ガイドOperations Guide

次の手順Next steps