Поделиться через


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

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

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

Внимание

В компании 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#: параметр 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#: асинхронный

Если вы используете асинхронный код, параметры не допускаются. В этом случае используйте 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# показано, как отправить собственное уведомление Службы push-уведомлений Apple (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 для отправки всплывающего уведомления собственной службы push-уведомлений 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.

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

Настройка

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

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

Если разработка ведется на локальном компьютере, добавьте параметры приложения в файл 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, разверните узел "Параметры" и выберите переменные среды.

  3. На вкладке "Параметры приложения" нажмите кнопку +Добавить, чтобы добавить ключ, например MyHubConnectionString. Имя этого параметра приложения — это параметр подключения выходной привязки в function.json или атрибуте .NET. Дополнительные сведения см. в статье Конфигурация.

  4. Для значения вставьте скопированные строка подключения DefaultFullSharedAccessSignature из центра уведомлений и нажмите кнопку "Применить".

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

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

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