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 Hub의 출력 바인딩을 지원합니다.Azure Functions supports output bindings for Notification Hubs.

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:

중요

Google은 FCM (Firebase Cloud Messaging)를 위해 GCM (Google Cloud Messaging)을 사용 하지 않습니다.Google has deprecated Google Cloud Messaging (GCM) in favor of Firebase Cloud Messaging (FCM). 이 출력 바인딩은 FCM을 지원 하지 않습니다.This output binding doesn't support FCM. FCM를 사용 하 여 알림을 보내려면 함수에서 직접 FIREBASE API 를 사용 하거나 템플릿 알림을사용 합니다.To send notifications using FCM, use the Firebase API directly in your function or use template notifications.

패키지 - 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 development 자동Automatic

패키지-함수 2.x 이상Packages - Functions 2.x and higher

이 바인딩은 함수 2.x 이상에서 사용할 수 없습니다.This binding is not available in Functions 2.x and higher.

예제 - 템플릿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));        
}

예제 - 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.

ConfigurationConfiguration

다음 표에서는 function.js 파일 및 특성에서 설정 하는 바인딩 구성 속성에 대해 설명 합니다 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 DescriptionDescription
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.
platformplatform 플랫폼Platform platform 속성은 알림의 대상으로 지정된 클라이언트 플랫폼을 나타냅니다.The platform property indicates the client platform your notification targets. 기본적으로 출력 바인딩에서 platform 속성을 생략하면 템플릿 알림을 사용하여 Azure Notification Hub에 구성된 플랫폼을 대상으로 지정할 수 있습니다.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 알림 허브 알림에서 템플릿을 사용하여 플랫폼 간 알림을 보내는 방법에 대한 자세한 내용은 템플릿을 참조하세요.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": "apns"
    }
  ],
  "disabled": false
}

연결 문자열 설정Connection string setup

알림 허브 출력 바인딩을 사용하려면 허브에 대한 연결 문자열을 구성해야 합니다.To use a notification hub output binding, you must configure the connection string for the hub. 기존 알림 허브를 선택하거나 Azure Portal의 통합 탭에서 새 알림 허브를 만들 수 있습니다.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. 알림 허브 연결 문자열 복사Copy the notification hub connection string
  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 Hub 운영 가이드Operations Guide

다음 단계Next steps