Associazioni di output di Hub di notifica per Funzioni di Azure

Questo articolo illustra come inviare le notifiche push tramite le associazioni di Hub di notifica di Azure in Funzioni di Azure. Funzioni di Azure supporta associazioni di output per Hub di notifica.

Hub di notifica di Azure deve essere configurato per il sistema PNS (Platform Notifications Service) che si vuole usare. Per informazioni su come ottenere notifiche push nell'app client da Hub di notifica, vedere Introduzione a Hub di notifica e selezionare la piattaforma client di destinazione dall'elenco a discesa nella parte superiore della pagina.

Importante

Google ha deprecato Google Cloud Messaging (GCM) a favore di Firebase Cloud Messaging (FCM). Questa associazione di output non supporta FCM. Per inviare notifiche tramite FCM, usare l'API Firebase direttamente nella funzione o usare le notifiche modello.

Pacchetti: Funzioni 1.x

Le associazioni di Hub di notifica sono incluse nel pacchetto NuGet Microsoft.Azure.WebJobs.Extensions.NotificationHubs versione 1.x. Il codice sorgente del pacchetto si trova nel repository GitHub azure-webjobs-sdk-extensions.

Nella tabella seguente viene descritto come aggiungere un supporto per questa associazione in ogni ambiente di sviluppo.

Ambiente di sviluppo Per aggiungere un supporto in
Funzioni 1.x
Sviluppo locale - Libreria di classi C# Installare il pacchetto
Sviluppo locale - Script C#, JavaScript, F# Automatico
Sviluppo con il portale Automatico

Pacchetti - Funzioni 2.x e successive

Questa associazione non è disponibile in Funzioni 2.x e versioni successive.

Modello di esempio

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

Vedere l'esempio specifico per ciascun linguaggio:

Esempio di modello di script C# - parametro out

Questo esempio invia una notifica per la registrazione di un modello contenente un segnaposto message 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 di script C# - asincrono

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 di script C# - JSON

Questo esempio invia una notifica per la registrazione di un modello contenente un segnaposto message 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 di script C# - tipi di librerie

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

Esempio di modello 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 JavaScript

Questo esempio invia una notifica per la registrazione di un modello contenente 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!"
    };
};

Esempio - notifica del servizio APN nativa

In questo esempio di script C# viene illustrato come inviare una notifica del servizio APN 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));        
}

Esempio - notifica WNS nativa

Questo esempio di script C# 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));        
}

Attributi

Nelle librerie di classi C# usare l'attributo NotificationHub.

I parametri e le proprietà del costruttore dell'attributo sono descritte nella sezione Configurazione.

Configurazione

La tabella seguente illustra le proprietà di configurazione dell'associazione impostate nel file function.json e nell'attributo NotificationHub :

Proprietà di function.json Proprietà dell'attributo Descrizione
type n/d Il valore deve essere impostato su notificationHub.
direction n/d Il valore deve essere impostato su out.
nome n/d Nome della variabile usato nel codice della funzione per il messaggio dell'hub di notifica.
tagExpression 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 HubName Nome della risorsa dell'hub di notifica nel portale di Azure.
connection ConnectionStringSetting Nome di un'impostazione dell'app che contiene una stringa di connessione di Hub di notifica. La stringa di connessione deve essere impostata sul valore di DefaultFullSharedAccessSignature per l'hub di notifica. Vedere Configurazione della stringa di connessione più avanti in questo articolo.
platform Piattaforma La proprietà platform indica la piattaforma client 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:

Quando si sviluppa in locale, aggiungere le impostazioni dell'applicazione nel file local.settings.json nella Values raccolta.

Esempio di file function.json

Di seguito è riportato un esempio di un'associazione di Hub di notifica in un file function.json.

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

Configurazione della stringa di connessione

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 nel portale di Azure. È 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 consente alla funzione di inviare i messaggi di notifica all'hub. Copiare la stringa di connessione dell'hub di notifica
  2. Passare all'app per le funzioni nel portale di Azure, scegliere Impostazioni applicazione, aggiungere una chiave, ad esempio MyHubConnectionString, incollare la copiata DefaultFullSharedAccessSignature per l'hub di notifica come valore e quindi fare clic su Salva.

Il nome di questa impostazione applicazione corrisponde all'impostazione di connessione dell'associazione di output in function.json o nell'attributo .NET. Vedere la sezione Configurazione più indietro in questo articolo.

Quando si sviluppa in locale, aggiungere le impostazioni dell'applicazione nel file local.settings.json nella Values raccolta.

Eccezioni e codici restituiti

Binding Informazioni di riferimento
Hub di notifica Operations Guide (Guida operativa)

Passaggi successivi