Condividi tramite


Associazioni di output di Hub di notifica di Azure 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.

È necessario configurare Hub di notifica per il servizio PNS (Platform Notifications Service) che si vuole usare. Per altre informazioni su come ottenere notifiche push nell'app client da Hub di notifica, vedere Avvio rapido: Configurare le notifiche push in un hub di notifica.

Importante

Google ha deprecato Google Cloud Messaging (GCM) a favore di Firebase Cloud Messaging (FCM). Tuttavia, le associazioni di output per Hub di notifica non supportano FCM. Per inviare notifiche tramite FCM, usare l'API Firebase direttamente nella funzione o usare le notifiche del 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.

La tabella seguente elenca come aggiungere il supporto per l'associazione di output in ogni ambiente di sviluppo.

Ambiente di sviluppo Per aggiungere il 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 versioni successive

L'associazione di output non è disponibile in Funzioni 2.x e versioni successive.

Modello di esempio:

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

Esempi di modelli per ogni lingua:

Esempio di modello di script C#: parametro out

In questo esempio viene inviata una notifica per una registrazione del modello che contiene un message 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 di script C#: asincrono

Se si usa codice asincrono, i parametri out non sono consentiti. In questo caso, usare IAsyncCollector per restituire la notifica del modello. Il codice seguente è un esempio asincrono dell'esempio 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 una registrazione del modello che contiene un message segnaposto nel modello usando 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 libreria

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#

In questo esempio viene inviata una notifica per una registrazione del modello che contiene location e message:

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

Esempio di modello JavaScript

In questo esempio viene inviata una notifica per una registrazione del modello che contiene 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: APNS nativo

Questo esempio di script C# illustra come inviare una notifica nativa di 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));        
}

Esempio: WNS nativo

Questo esempio di script C# illustra come usare i tipi definiti nella libreria di Hub di notifica di Microsoft Azure per inviare una notifica di tipo avviso popup di Windows Push Notification Service (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));        
}

Attributi

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

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

Impostazione

Nella tabella seguente sono elencate 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 Impostare su notificationHub.
direction n/d Impostare su out.
name n/d Nome della variabile usato nel codice della funzione per il messaggio dell'hub di notifica.
tagExpression TagExpression Le espressioni di tag consentono di specificare che le notifiche vengono recapitate a un set di dispositivi registrati per ricevere 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. Impostare il stringa di connessione sul valore DefaultFullSharedAccessSignature per l'hub di notifica. Per altre informazioni, vedere Configurazione della stringa di connessione.
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 altre informazioni sull'uso di modelli per inviare notifiche multipiattaforma con un hub di notifica di Azure, vedere Modelli di Hub di notifica. Quando la piattaforma è impostata, deve essere 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 associazione di Hub di notifica in un file di 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 nella 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.

    Il stringa di connessione per il criterio DefaultFullSharedAccessSignature viene copiato nell'hub di notifica. Questa stringa di connessione consente alla funzione di inviare i messaggi di notifica all'hub. Screenshot che mostra come copiare l'hub di notifica stringa di connessione.

  2. Passare all'app per le funzioni nella portale di Azure, espandere Impostazioni e quindi selezionare Variabili di ambiente.

  3. Nella scheda Impostazioni app selezionare + Aggiungi per aggiungere una chiave, ad esempio MyHubConnectionString. L'impostazione Nome di questa app è l'impostazione di connessione dell'associazione di output in function.json o l'attributo .NET. Per altre informazioni, vedere Configurazione.

  4. Per il valore, incollare il stringa di connessione DefaultFullSharedAccessSignature copiato dall'hub di notifica e quindi selezionare Applica.

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

Eccezioni e codici restituiti

Binding Riferimento
Hub di notifica Operations Guide (Guida operativa)