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:

  • name : nome della variabile usato nel codice della funzione per il messaggio dell'hub di notifica.
  • type : 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.
  • connection : questa stringa di connessione deve essere una stringa di connessione dell' impostazione dell'applicazione configurata sul valore DefaultFullSharedAccessSignature per l'hub di notifica.
  • direction : deve essere impostato su "out".
  • platform : la piattaforma delle proprietà indica la piattaforma di notifica a cui è indirizzata la notifica. Deve essere 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. Nella scheda Integra è possibile selezionare quindi l'hub di notifica o crearne uno nuovo.

È anche possibile aggiungere manualmente una stringa di connessione per un hub esistente aggiungendo una stringa di connessione per DefaultFullSharedAccessSignature all'hub di notifica. Questa stringa di connessione fornisce l'autorizzazione di accesso alla funzione per inviare messaggi di notifica. È possibile accedere al valore della stringa di connessione DefaultFullSharedAccessSignature dal pulsante chiavi nel pannello principale della risorsa dell'hub di notifica nel portale di Azure. Per aggiungere manualmente una stringa di connessione per l'hub, usare la procedura seguente:

  1. Nel pannello App per le funzioni del portale di Azure fare clic su Impostazioni dell'app per le funzioni > Passa a Impostazioni del servizio app.
  2. Nel pannello Impostazioni fare clic su Impostazioni applicazione.
  3. Scorrere verso il basso fino alla sezione Impostazioni app e aggiungere una voce denominata per il valore DefaultFullSharedAccessSignature per l'hub di notifica.
  4. Fare riferimento al nome della stringa di impostazione app nelle associazioni di output. È simile a MyHubConnectionString usato nell'esempio precedente.

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.