Compartir vía


Enlaces de salida de Azure Notification Hubs para Azure Functions

En este artículo se explica cómo enviar notificaciones Configurar las notificaciones de inserción mediante el uso de enlaces de Azure Notification Hubs en Azure Functions. Azure Functions admite los enlaces de salida para Notification Hubs.

Debe configurar Notification Hubs para el servicio de notificaciones de plataforma (PNS) que desea usar. Para obtener más información sobre cómo obtener notificaciones push en la aplicación cliente desde Notification Hubs, consulte Inicio rápido: Configuración de notificaciones push en un centro de notificaciones.

Importante

Google ha dejado de usar Google Cloud Messaging (GCM) en favor de Firebase Cloud Messaging (FCM). Sin embargo, los enlaces de salida para Notification Hubs no admiten FCM. Para enviar notificaciones con FCM, use Firebase API directamente en su función o use notificaciones de plantilla.

Paquetes: Functions 1.x

Los enlaces de Notification Hubs se proporcionan en el paquete NuGet Microsoft.Azure.WebJobs.Extensions.NotificationHubs, versión 1.x. El código fuente del paquete está en el repositorio azure-webjobs-sdk-extensions de GitHub.

En la tabla siguiente se muestra cómo agregar compatibilidad con el enlace de salida en cada entorno de desarrollo.

Entorno de desarrollo Para agregar compatibilidad en Functions 1.x
Desarrollo local: biblioteca de clases de C# Instalación del paquete
Desarrollo local: script de C#, JavaScript, F# Automático
Desarrollo con Portal Automático

Paquetes: Functions 2.x y versiones posteriores

El enlace de salida no está disponible en Functions 2.x ni en versiones posteriores.

Ejemplo de plantilla:

Las notificaciones que envía pueden ser notificaciones nativas o de plantilla. Una notificación nativa tiene como destino una plataforma cliente específica, tal como se configura en la platform propiedad del enlace de salida. Las notificaciones de plantillas pueden enviarse varias plataformas.

Ejemplos de plantillas para cada idioma:

Ejemplo de plantilla de script de C#: parámetro out

En este ejemplo se envía una notificación para un registro de plantilla que contiene un message marcador de posición en la plantilla:

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

Ejemplo de plantilla de script de C#: asincrónico

Si usa código asincrónico, no se permiten los parámetros out. En este caso, use IAsyncCollector para devolver la notificación de plantilla. El código siguiente es un ejemplo asincrónico del ejemplo 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;
}

Ejemplo de plantilla de script de C#: JSON

En este ejemplo se envía una notificación para un registro de plantilla que contiene un message marcador de posición en la plantilla mediante una cadena 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!\"}";
}

Ejemplo de plantilla de script de C#: tipos de biblioteca

En este ejemplo se muestra cómo usar los tipos definidos en la biblioteca de Microsoft Azure Notification Hubs:

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

Ejemplo de plantilla de F#

En este ejemplo se envía una notificación para un registro de plantilla que contiene location y message:

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

Ejemplo de plantilla de JavaScript

En este ejemplo se envía una notificación para un registro de plantilla que contiene location y 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!"
    };
};

Ejemplo: APNS nativo

En este ejemplo de script de C# se muestra cómo enviar una notificación nativa de 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));        
}

Ejemplo: WNS nativo

En este ejemplo de script de C# se muestra cómo usar los tipos definidos en la biblioteca de Microsoft Azure Notification Hubs para enviar una notificación del sistema nativa del Servicio de notificaciones push de 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));        
}

Atributos

En las bibliotecas de clases de C#, use el atributo NotificationHub.

Los parámetros y propiedades del constructor del atributo se describen en la sección Configuración .

Configuración

En la tabla siguiente se enumeran las propiedades de configuración de enlace establecidas en el archivo function.json y el NotificationHub atributo :

Propiedad de function.json Propiedad de atributo Descripción
type N/D Establézcalo en notificationHub.
direction N/D Establézcalo en out.
name N/D Nombre de variable usado en el código de función para el mensaje del Centro de notificaciones.
tagExpression TagExpression Las expresiones de etiqueta permiten especificar que las notificaciones se entreguen a un conjunto de dispositivos registrados para recibir notificaciones que coincidan con la expresión de etiqueta. Para obtener más información, consulte Expresiones de etiqueta y enrutamiento.
hubName HubName Nombre del recurso del centro de notificaciones en Azure Portal.
connection ConnectionStringSetting El nombre de una configuración de aplicación que contiene una cadena de conexión de Notification Hubs. Establezca el cadena de conexión en el valor DefaultFullSharedAccessSignature del centro de notificaciones. Para obtener más información, consulte Configuración de cadenas de conexión.
platform Plataforma La propiedad de plataforma indica la plataforma cliente a donde se enviará la notificación. De forma predeterminada, si se omite la propiedad de plataforma desde el enlace de salida, las notificaciones de plantilla se pueden usar para tener como destino cualquier plataforma configurada en el centro de notificaciones de Azure. Para más información sobre el uso de plantillas para enviar notificaciones multiplataforma con un centro de notificaciones de Azure, consulte Plantillas de Notification Hubs. Cuando se establece la plataforma , debe ser uno de los siguientes valores:

Cuando esté desarrollando localmente, agregue la configuración de la aplicación en el archivo local.settings.json de la colección Values.

Ejemplo de archivo function.json

Este es un ejemplo de un enlace de Notification Hubs en un archivo function.json :

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

Configuración de la cadena de conexión

Para usar un enlace de salida de una instancia de Notification Hub, debe configurar la cadena de conexión de la instancia. Puede seleccionar un centro de notificaciones existente o crear uno nuevo en la pestaña Integrar de Azure Portal. También puede configurar la cadena de conexión de forma manual.

Para configurar la cadena de conexión a un Centro de notificaciones existente:

  1. Vaya al Centro de notificaciones en Azure Portal, elija Directivas de acceso y seleccione el botón Copiar situado junto a la directiva DefaultFullSharedAccessSignature.

    El cadena de conexión de la directiva DefaultFullSharedAccessSignature se copia en el centro de notificaciones. Esta cadena de conexión permite que la función envíe mensajes de notificación a la instancia de Notification Hubs. Captura de pantalla que muestra cómo copiar el centro de notificaciones cadena de conexión.

  2. Vaya a la aplicación de funciones en Azure Portal, expanda Configuración y, a continuación, seleccione Variables de entorno.

  3. En la pestaña Configuración de la aplicación, seleccione + Agregar para agregar una clave como MyHubConnectionString. El nombre de esta configuración de aplicación es la configuración de conexión de enlace de salida en function.json o el atributo .NET. Para obtener más información, vea Configuración.

  4. Para el valor, pegue el cadena de conexión DefaultFullSharedAccessSignature copiado del centro de notificaciones y, a continuación, seleccione Aplicar.

Cuando esté desarrollando localmente, agregue la configuración de la aplicación en el archivo local.settings.json de la colección Values.

Excepciones y códigos de retorno

Enlace Referencia
Centro de notificaciones Guía de operaciones