Выходная привязка Центра уведомлений для службы "Функции Azure"

Эта статья объясняет, как отправлять push-уведомления с помощью привязок Центров уведомлений Azure в службе "Функции Azure". Служба "Функции Azure" поддерживает выходные привязки для Центров уведомлений.

Центры уведомлений нужно настроить для служб уведомлений платформы (PNS), которые необходимо использовать. Сведения о том, как получать push-уведомления в клиентское приложение из Центров уведомлений, см. в статье Начало работы с Центрами уведомлений для приложений универсальной платформы Windows. Вы также можете выбрать целевую клиентскую платформу из раскрывающегося списка в верхней части страницы.

Важно!

В компании Google отказались от устаревшего Google Cloud Messaging (GCM) в пользу Firebase Cloud Messaging (FCM). Эта выходная привязка не поддерживает FCM. Чтобы отправлять уведомления с помощью FCM, используйте API Firebase непосредственно в функции или же уведомления шаблона.

Пакеты – Функции 1.x

Привязки Центров уведомлений доступны в пакете NuGet Microsoft.Azure.WebJobs.Extensions.NotificationHubs версии 1.х. Исходный код для пакета находится в репозитории GitHub azure-webjobs-sdk-extensions.

В следующей таблице указано как добавить поддержку для этой привязки в каждой среде разработки.

Среда разработки Для добавления поддержки в
Функции 1.x
Локальная разработка – библиотека классов C# Установка пакета
Локальная разработка – Скрипт C#, JavaScript, F# Автоматически
Разработка на портале Автоматически

Пакеты. Функции версии 2.x и выше

Эта привязка недоступна в Функциях версии 2.x и выше.

Пример шаблона

Можно отправлять собственные или шаблонные уведомления. Собственные уведомления нацелены на определенную клиентскую платформу, указанную в свойстве platform привязки для вывода. Шаблонное уведомление можно использовать для нескольких платформ.

Языковой пример см. в разделах:

Пример шаблона сценария C# — параметр вывода

В этом примере отправляется уведомление для регистрации шаблона, содержащего заполнитель 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# — асинхронный

При использовании асинхронного кода параметры вывода не допускаются. В этом случае для возвращения шаблонного уведомления следует использовать 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

В этом примере отправляется уведомление для регистрации шаблона, содержащего заполнитель message и использующего допустимую строку JSON.

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.

#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# показано, как отправлять собственные уведомления 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 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, для отправки всплывающего уведомления 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.

Параметры конструктора атрибута и его свойства описаны в разделе конфигурации.

Конфигурация

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json и атрибуте NotificationHub:

свойство function.json Свойство атрибута Описание
type Недоступно Нужно задать значение notificationHub.
direction Недоступно Нужно задать значение out.
name Недоступно Имя переменной, используемой в коде функции для сообщения Центра уведомлений.
tagExpression TagExpression Выражения тегов позволяют указать, что уведомления должны отправляться на устройства, зарегистрированные для получения уведомлений, соответствующих выражению тега. Дополнительные сведения см. в статье Маршрутизация и выражения тегов.
hubName HubName Имя ресурса Центра уведомлений на портале Azure.
connection; ConnectionStringSetting Имя параметра приложения, содержащего строку подключения Центров уведомлений. Для нее необходимо задать значение DefaultFullSharedAccessSignature для Центра уведомлений. Ознакомьтесь с разделом Настройка строки подключения далее в этой статье.
platform Платформа Свойство platform указывает целевую клиентскую платформу для ваших уведомлений. По умолчанию, если свойство платформы отсутствует в выходной привязке, шаблонные уведомления могут использоваться для любой платформы, настроенной в концентраторе уведомлений Azure. Дополнительные общие сведения об использовании шаблонов для отправки кроссплатформенных уведомлений с помощью центра уведомлений Azure см. в разделе Шаблоны. Если свойство platform задано, оно должно иметь одно из следующих значений:

Если разработка ведется на локальном компьютере, добавьте параметры приложения в файл local.settings.json в коллекции Values.

Пример файла function.json

Ниже приведен пример привязки Центров уведомлений в файле function.json.

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

Настройка строки подключения

Для использования привязки для вывода Центра уведомлений необходимо настроить отдельную строку подключения. На портале Azure вы можете выбрать имеющийся Центр уведомлений или создать новый на вкладке Интегрировать. Кроме того, строку подключения можно настроить вручную.

Настройка строки подключения к имеющемуся Центру уведомлений

  1. Перейдите к Центру уведомлений на портале Azure. Выберите Политики доступа, а затем нажмите кнопку копирования рядом с политикой DefaultFullSharedAccessSignature. Это позволит скопировать строку подключения политики DefaultFullSharedAccessSignature к вашему Центру уведомлений. Эта строка подключения позволяет функции отправлять сообщения центру уведомлений. Копирование строки подключения к концентратору уведомлений
  2. Перейдите к приложению-функции на портале Azure. Выберите Параметры приложения, добавьте ключ, например MyHubConnectionString, вставьте скопированную строку подключения политики DefaultFullSharedAccessSignature к Центру уведомлений как значение, а затем нажмите кнопку Сохранить.

Имя параметра приложения такое же, как и параметра подключения выходной привязки в файле function.json или атрибуте .NET. Ознакомьтесь с разделом конфигурации в этой статье.

Если разработка ведется на локальном компьютере, добавьте параметры приложения в файл local.settings.json в коллекции Values.

Исключения и коды возврата

Привязка Справочник
Центр уведомлений Руководство по операциям

Дальнейшие действия