Associações de saída dos Hubs de Notificação do Azure para o Azure Functions

Este artigo explica como enviar notificações por push usando associações de Hubs de Notificação do Azure no Azure Functions. O Azure Functions dá suporte a associações de saída para Hubs de Notificação.

Você deve configurar os Hubs de Notificação para o Serviço de Notificações da Plataforma (PNS) que deseja usar. Para obter mais informações sobre como obter notificações por push em seu aplicativo cliente dos Hubs de Notificação, consulte Guia de início rápido: configurar notificações por push em um hub de notificação.

Importante

O Google substituiu o Google Cloud Messaging (GCM) em favor do Firebase Cloud Messaging (FCM). No entanto, as ligações de saída para Hubs de Notificação não suportam FCM. Para enviar notificações usando o FCM, use a API do Firebase diretamente em sua função ou use notificações de modelo.

Pacotes: Funções 1.x

As associações dos Hubs de Notificação são fornecidas no pacote NuGet Microsoft.Azure.WebJobs.Extensions.NotificationHubs, versão 1.x. O código-fonte do pacote está no repositório GitHub azure-webjobs-sdk-extensions .

A tabela a seguir lista como adicionar suporte para vinculação de saída em cada ambiente de desenvolvimento.

Ambiente de desenvolvimento Para adicionar suporte no Functions 1.x
Desenvolvimento local: biblioteca de classes C# Instalar o pacote
Desenvolvimento local: script C#, JavaScript, F# Automático
Desenvolvimento de portais Automático

Pacotes: Funções 2.x e superiores

A vinculação de saída não está disponível no Functions 2.x e superior.

Exemplo: modelo

As notificações enviadas podem ser notificações nativas ou notificações de modelo. Uma notificação nativa tem como alvo uma plataforma de cliente específica, conforme configurado na platform propriedade da ligação de saída. Uma notificação de modelo pode ser usada para segmentar várias plataformas.

Exemplos de modelos para cada idioma:

Exemplo de modelo de script C#: parâmetro out

Este exemplo envia uma notificação para um registro de modelo que contém um message espaço reservado no modelo:

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

Exemplo de modelo de script C#: assíncrono

Se você estiver usando código assíncrono, os parâmetros de saída não serão permitidos. Nesse caso, use IAsyncCollector para retornar sua notificação de modelo. O código a seguir é um exemplo assíncrono do exemplo anterior:

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

Exemplo de modelo de script C#: JSON

Este exemplo envia uma notificação para um registro de modelo que contém um message espaço reservado no modelo usando uma cadeia de caracteres JSON válida:

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!\"}";
}

Exemplo de modelo de script C#: tipos de biblioteca

Este exemplo mostra como usar tipos definidos na Biblioteca de Hubs de Notificação do 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);
}

Exemplo de modelo F#

Este exemplo envia uma notificação para um registro de modelo que contém location e message:

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

Exemplo de modelo JavaScript

Este exemplo envia uma notificação para um registro de modelo que contém location e 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!"
    };
};

Exemplo: APNS nativo

Este exemplo de script C# mostra como enviar uma notificação nativa do 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));        
}

Exemplo: WNS nativo

Este exemplo de script C# mostra como usar tipos definidos na Biblioteca de Hubs de Notificação do Microsoft Azure para enviar uma notificação do sistema WNS (Serviço de Notificação por Push do Windows) nativa:

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

Atributos

Em bibliotecas de classes C#, use o atributo NotificationHub .

Os parâmetros e propriedades do construtor do atributo são descritos na seção Configuração .

Configuração

A tabela a seguir lista as propriedades de configuração de associação definidas no arquivo function.json e o NotificationHub atributo:

function.json propriedade Propriedade Attribute Description
type n/d Definido como notificationHub.
direção n/d Definido como out.
Designação n/d Nome da variável usada no código de função para a mensagem do hub de notificação.
tagExpressão TagExpression As expressões de tag permitem especificar que as notificações sejam entregues a um conjunto de dispositivos registrados para receber notificações correspondentes à expressão de tag. Para obter mais informações, consulte Roteamento e expressões de marca.
Nome do hub Nome do Hub; O nome do recurso de hub de notificação no portal do Azure.
conexão ConnectionStringSetting O nome de uma configuração de aplicativo que contém uma cadeia de conexão de Hubs de Notificação. Defina a cadeia de conexão como o valor DefaultFullSharedAccessSignature para seu hub de notificação. Para obter mais informações, consulte Configuração da cadeia de conexão.
plataforma Plataforma A propriedade platform indica a plataforma cliente que sua notificação visa. Por padrão, se a propriedade da plataforma for omitida da associação de saída, as notificações de modelo poderão ser usadas para direcionar qualquer plataforma configurada no Hub de Notificação do Azure. Para obter mais informações sobre como usar modelos para enviar notificações entre plataformas com um Hub de Notificação do Azure, consulte Modelos de Hubs de Notificação. Quando a plataforma é definida, deve ser um dos seguintes valores:

Quando estiver desenvolvendo localmente, adicione as configurações do aplicativo no arquivo local.settings.json na Values coleção.

function.json exemplo de arquivo

Aqui está um exemplo de uma associação de Hubs de Notificação em um arquivo function.json :

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

Configuração da cadeia de conexão

Para usar uma ligação de saída do hub de notificação, você deve configurar a cadeia de conexão para o hub. Você pode selecionar um hub de notificação existente ou criar um novo na guia Integrar no portal do Azure. Você também pode configurar a cadeia de conexão manualmente.

Para configurar a cadeia de conexão para um hub de notificação existente:

  1. Navegue até o hub de notificação no portal do Azure, escolha Políticas de acesso e selecione o botão de cópia ao lado da política DefaultFullSharedAccessSignature .

    A cadeia de conexão para a política DefaultFullSharedAccessSignature é copiada para o hub de notificação. Essa cadeia de conexão permite que sua função envie mensagens de notificação para o hub. Captura de tela que mostra como copiar a cadeia de conexão do hub de notificação.

  2. Navegue até seu aplicativo de função no portal do Azure, expanda Configurações e selecione Variáveis de ambiente.

  3. Na guia Configuração do aplicativo, selecione + Adicionar para adicionar uma chave como MyHubConnectionString. A configuração Nome deste aplicativo é a configuração de conexão de vinculação de saída no function.json ou no atributo .NET. Para obter mais informações, consulte Configuração.

  4. Para o valor, cole a cadeia de conexão DefaultFullSharedAccessSignature copiada do hub de notificação e selecione Aplicar.

Quando estiver desenvolvendo localmente, adicione as configurações do aplicativo no arquivo local.settings.json na Values coleção.

Exceções e códigos de devolução

Enlace Referência
Hub de Notificação Guia de Operações