Enlace de saída dos Hubs de Notificação para Funções do Azure

Este artigo explica como enviar notificações push com os enlaces dos Hubs de Notificação do Azure no Funções do Azure. Funções do Azure suporta enlaces de saída para Hubs de Notificação.

Os Hubs de Notificação do Azure têm de ser configurados para o Serviço de Notificações de Plataforma (PNS) que pretende utilizar. Para saber como obter notificações push na aplicação cliente a partir dos Hubs de Notificação, veja Introdução aos Hubs de Notificação e selecione a plataforma de cliente de destino na lista pendente junto à parte superior da página.

Importante

A Google preteriu o Google Cloud Messaging (GCM) a favor do Firebase Cloud Messaging (FCM). Este enlace de saída não suporta FCM. Para enviar notificações com a FCM, utilize a API Firebase diretamente na sua função ou utilize notificações de modelo.

Pacotes - Funções 1.x

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

A tabela seguinte indica como adicionar suporte para este enlace em cada ambiente de desenvolvimento.

Ambiente de programação Para adicionar suporte no
Funções 1.x
Desenvolvimento local - Biblioteca de classes C# Instalar o pacote
Desenvolvimento local - Script C#, JavaScript, F# Automático
Desenvolvimento do portal Automático

Pacotes - Funções 2.x e superior

Este enlace não está disponível nas Funções 2.x e superiores.

Exemplo - modelo

As notificações que enviar podem ser notificações nativas ou notificações de modelo. As notificações nativas visam uma plataforma de cliente específica, conforme configurada na platform propriedade do enlace de saída. Uma notificação de modelo pode ser utilizada para direcionar várias plataformas.

Veja o exemplo específico do idioma:

Exemplo de modelo de script C# - parâmetro de saída

Este exemplo envia uma notificação para um registo de modelo que contém um message marcador de posição 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 estiver a utilizar código assíncrono, os parâmetros de saída não são permitidos. Neste caso, utilize IAsyncCollector para devolver a notificação de modelo. O código seguinte é um exemplo assíncrono do código acima.

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 registo de modelo que contém um message marcador de posição no modelo com uma cadeia 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 utilizar 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 registo 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 registo 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 - nativo do APNS

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

Exemplo - WNS nativo

Este exemplo de script C# mostra como utilizar tipos definidos na Biblioteca de Notification Hubs do Microsoft Azure para enviar uma notificação de alerta WNS 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

Nas bibliotecas de classes C#, utilize o atributo NotificationHub .

Os parâmetros e propriedades do construtor do atributo estão descritos na secção de configuração .

Configuração

A tabela seguinte explica as propriedades de configuração de enlace que definiu no ficheiro function.json e o NotificationHub atributo :

propriedade function.json Propriedade atributo Description
tipo n/a Tem de estar definido como notificationHub.
direção n/a Tem de estar definido como out.
nome n/a Nome da variável utilizado no código de função para a mensagem do hub de notificação.
tagExpression TagExpression As expressões de etiquetas permitem-lhe especificar que as notificações são entregues a um conjunto de dispositivos que se registaram para receber notificações que correspondem à expressão de etiqueta. Para obter mais informações, veja Encaminhamento e expressões de etiquetas.
hubName HubName Nome do recurso do hub de notificação no portal do Azure.
ligação ConnectionStringSetting O nome de uma definição de aplicação que contém uma cadeia de ligação dos Hubs de Notificação. A cadeia de ligação tem de ser definida como o valor DefaultFullSharedAccessSignature para o hub de notificação. Veja Configuração da cadeia de ligação mais à frente neste artigo.
plataforma Plataforma A propriedade da plataforma indica a plataforma cliente a que as suas notificações são alvos. Por predefinição, se a propriedade da plataforma for omitida do enlace de saída, as notificações de modelo podem ser utilizadas para direcionar qualquer plataforma configurada no Hub de Notificação do Azure. Para obter mais informações sobre como utilizar modelos em geral para enviar notificações entre plataformas com um Hub de Notificação do Azure, veja Modelos. Quando definida, a plataforma tem de ser um dos seguintes valores:

Quando estiver a desenvolver localmente, adicione as definições da aplicação no ficheiro local.settings.json na Values coleção.

exemplo de ficheiro function.json

Eis um exemplo de um enlace dos Notification Hubs num ficheiro 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 ligação

Para utilizar um enlace de saída do hub de notificação, tem de configurar a cadeia de ligação para o hub. Pode selecionar um notification hub existente ou criar um novo diretamente no separador Integrar no portal do Azure. Também pode configurar a cadeia de ligação manualmente.

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

  1. Navegue para o hub de notificação no portal do Azure, selecione Políticas de acesso e selecione o botão copiar junto à política DefaultFullSharedAccessSignature. Esta ação copia a cadeia de ligação da política DefaultFullSharedAccessSignature para o hub de notificação. Esta cadeia de ligação permite que a função envie mensagens de notificação para o hub. Copiar a cadeia de ligação do hub de notificação
  2. Navegue para a sua aplicação de funções no portal do Azure, selecione Definições da aplicação, adicione uma chave como MyHubConnectionString, cole a DefaultFullSharedAccessSignature copiada para o hub de notificação como o valor e, em seguida, clique em Guardar.

O nome desta definição de aplicação é o que vai na definição de ligação de enlace de saída em function.json ou no atributo .NET. Veja a secção Configuração anteriormente neste artigo.

Quando estiver a desenvolver localmente, adicione as definições da aplicação no ficheiro local.settings.json na Values coleção.

Exceções e códigos de retorno

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

Passos seguintes