Associazione di output di Hub di notifica in Funzioni di Azure

Questo articolo illustra come configurare e scrivere il codice di associazioni di Hub di notifica in Funzioni di Azure.

Informazioni di riferimento per gli sviluppatori delle Funzioni di Azure. Se non si ha familiarità con le Funzioni di Azure, iniziare con le seguenti risorse:

Le funzioni possono inviare notifiche push usando un hub di notifica di Azure configurato con poche righe di codice. L'hub di notifica di Azure tuttavia deve essere configurato per i servizi di notifiche della piattaforma (PNS) che si intende usare. Per altre informazioni sulla configurazione di un hub di notifica di Azure e sullo sviluppo di applicazioni client che eseguono la registrazione per ricevere notifiche, vedere Introduzione ad Hub di notifica per le app della piattaforma UWP (Universal Windows Platform) e fare clic sulla piattaforma client di destinazione nella parte superiore.

Le notifiche inviate possono essere native o modello. Le notifiche native sono indirizzate a una piattaforma di notifica specifica, come configurato nella platform proprietà dell'associazione di uscita. È possibile utilizzare una notifica modello per indirizzare più piattaforme.

Associazione delle proprietà di uscita dell'hub di notifica

Il file function.json specifica le proprietà seguenti:

Proprietà Descrizione
nome Nome della variabile usato nel codice della funzione per il messaggio dell'hub di notifica.
type Il valore deve essere impostato su notificationHub.
tagExpression Le espressioni tag consentono di specificare che le notifiche devono essere recapitate a un set di dispositivi che hanno eseguito la registrazione per ricevere le notifiche corrispondenti all'espressione tag. Per altre informazioni, vedere Routing ed espressioni tag.
hubName Nome della risorsa dell'hub di notifica nel portale di Azure.
connessione Questa stringa di connessione deve essere una stringa di connessione di impostazione applicazione impostata sul valore DefaultFullSharedAccessSignature per l'hub di notifica.
direction Il valore deve essere impostato su out.
platform La proprietà platform indica la piattaforma di notifica a cui è indirizzata la notifica. Per impostazione predefinita, se la proprietà della piattaforma viene omessa dall'associazione di output, possono essere usate le notifiche del modello per indirizzarsi a qualsiasi piattaforma configurata nell'hub di notifica di Azure. Per ulteriori informazioni sull'utilizzo dei modelli in generale per inviare notifiche tra piattaforme con un hub di notifica di Azure, vedere Modelli. Se impostata, la proprietà platform deve avere uno dei valori seguenti:

Function.json di esempio:

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

Configurazione della stringa di connessione dell'hub di notifica

Per usare un'associazione di output dell'hub di notifica, è necessario configurare la stringa di connessione per l'hub. È possibile selezionare un hub di notifica esistente o crearne uno nuovo direttamente dalla scheda Integrazione nella funzione. È anche possibile configurare manualmente la stringa di connessione.

Per configurare la stringa di connessione a un hub di notifica esistente:

  1. Passare all'hub di notifica nel portale di Azure, scegliere Criteri di accesso e selezionare il pulsante di copia accanto a DefaultFullSharedAccessSignature. In questo modo, la stringa di connessione per il criterio DefaultFullSharedAccessSignature viene copiata nell'hub di notifica. Questa stringa di connessione fornisce l'autorizzazione di accesso alla funzione per inviare messaggi di notifica. Copiare la stringa di connessione dell'hub di notifica
  2. Passare all'app per le funzioni nel portale di Azure, scegliere Impostazioni dell'applicazione, aggiungere una chiave, ad esempio MyHubConnectionString, incollare il valore di DefaultFullSharedAccessSignature copiato per l'hub di notifica e quindi fare clic su Salva.

A questo punto, è possibile usare questa impostazione applicazione denominata che definisce la connessione dell'hub di notifica nel binding di output.

Notifiche native APNS con trigger in coda C#

Questo esempio illustra come usare i tipi definiti nella libreria di Hub di notifica di Microsoft Azure per inviare una notifica 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.Info($"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.Info($"{apnsNotificationPayload}");
    await notification.AddAsync(new AppleNotification(apnsNotificationPayload));        
}

Notifiche native GCM con trigger in coda C#

Questo esempio illustra come usare i tipi definiti nella libreria di Hub di notifica di Microsoft Azure per inviare una notifica GCM 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 GCM notification is ...
    // { "data": { "message": "notification message" }}  

    log.Info($"Sending GCM notification of a new user");    
    dynamic user = JsonConvert.DeserializeObject(myQueueItem);    
    string gcmNotificationPayload = "{\"data\": {\"message\": \"A new user wants to be added (" + 
                                        user.name + ")\" }}";
    log.Info($"{gcmNotificationPayload}");
    await notification.AddAsync(new GcmNotification(gcmNotificationPayload));        
}

Notifiche native WNS con trigger in coda C#

Questo esempio illustra come usare i tipi definiti nella libreria di Hub di notifica di Microsoft Azure per inviare una notifica WNS popup 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));        
}

Esempio di modello per i trigger timer Node.js

Questo esempio invia una notifica per la registrazione di un modello contenente location e message.

module.exports = 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!"
    };
    context.done();
};

Esempio di modello per i trigger timer F#

Questo esempio invia una notifica per la registrazione di un modello contenente location e message.

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

Esempio di modello che utilizza un parametro di uscita

Questo esempio invia una notifica per la registrazione di un modello contenente message un segnaposto nel modello.

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

Esempio di modello con funzione asincrona

I parametri di uscita non sono consentiti se si utilizza codice asincrono. In questo caso utilizzare IAsyncCollector per tornare alla notifica modello. Il codice seguente è un esempio asincrono del codice precedente.

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

Esempio di modello che utilizza JSON

Questo esempio invia una notifica per la registrazione di un modello contenente message un segnaposto nel modello tramite una stringa JSON valida.

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

Esempio di modello utilizzando i tipi di librerie degli hub di notifica

Questo esempio illustra come usare i tipi definiti nella libreria di Hub di notifica di 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);
}

Passaggi successivi

Per informazioni su altre associazioni e altri trigger per Funzioni di Azure, vedere Guida di riferimento per gli sviluppatori di trigger e associazioni di Funzioni di Azure.