Associazioni di output di Hub di notifica per Funzioni di AzureNotification Hubs output binding for Azure Functions

Questo articolo illustra come inviare le notifiche push tramite le associazioni di Hub di notifica di Azure in Funzioni di Azure.This article explains how to send push notifications by using Azure Notification Hubs bindings in Azure Functions. Funzioni di Azure supporta associazioni di output per Hub di notifica.Azure Functions supports output bindings for Notification Hubs.

Hub di notifica di Azure deve essere configurato per il sistema PNS (Platform Notifications Service) che si vuole usare.Azure Notification Hubs must be configured for the Platform Notifications Service (PNS) you want to use. 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.To learn how to get push notifications in your client app from Notification Hubs, see Getting started with Notification Hubs and select your target client platform from the drop-down list near the top of the page.

Informazioni di riferimento per gli sviluppatori delle Funzioni di Azure.This is reference information for Azure Functions developers. Se non si ha familiarità con le Funzioni di Azure, iniziare con le seguenti risorse:If you're new to Azure Functions, start with the following resources:

Modello di esempioExample - template

Le notifiche inviate possono essere native o modello.The notifications you send can be native notifications or template notifications. Le notifiche native sono indirizzate a una piattaforma client specifica, come configurato nella proprietà platform dell'associazione di output.Native notifications target a specific client platform as configured in the platform property of the output binding. È possibile utilizzare una notifica modello per indirizzare più piattaforme.A template notification can be used to target multiple platforms.

Vedere l'esempio specifico per ciascun linguaggio:See the language-specific example:

Esempio di modello di script C# - parametro outC# script template example - out parameter

Questo esempio invia una notifica per la registrazione di un modello contenente un segnaposto message nel modello.This example sends a notification for a template registration that contains a message placeholder in the template.

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# - asincronoC# script template example - asynchronous

I parametri di uscita non sono consentiti se si utilizza codice asincrono.If you are using asynchronous code, out parameters are not allowed. In questo caso utilizzare IAsyncCollector per tornare alla notifica modello.In this case use IAsyncCollector to return your template notification. Il codice seguente è un esempio asincrono del codice precedente.The following code is an asynchronous example of the code above.

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# - JSONC# script template example - JSON

Questo esempio invia una notifica per la registrazione di un modello contenente un segnaposto message nel modello tramite una stringa JSON valida.This example sends a notification for a template registration that contains a message placeholder in the template using a valid JSON string.

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 librerieC# script template example - library types

Questo esempio illustra come usare i tipi definiti nella libreria di Hub di notifica di Microsoft Azure.This example shows how to use types defined in the Microsoft Azure Notification Hubs Library.

#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#F# template example

Questo esempio invia una notifica per la registrazione di un modello contenente location e message.This example sends a notification for a template registration that contains location and message.

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

Esempio di modello JavaScriptJavaScript template example

Questo esempio invia una notifica per la registrazione di un modello contenente location e message.This example sends a notification for a template registration that contains location and 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 - notifica del servizio APN nativaExample - APNS native

In questo esempio di script C# viene illustrato come inviare una notifica del servizio APN nativa.This C# script example shows how to send a native APNS notification.

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

Esempio - notifica GCM nativaExample - GCM native

In questo esempio di script C# viene illustrato come inviare una notifica GCM nativa.This C# script example shows how to send a native GCM notification.

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

Esempio - notifica WNS nativaExample - WNS native

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.This C# script example shows how to use types defined in the Microsoft Azure Notification Hubs Library to send a native WNS toast notification.

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

AttributiAttributes

Per funzioni in C# precompilato usare l'attributo NotificationHub, definito nel pacchetto NuGet Microsoft.Azure.WebJobs.Extensions.NotificationHubs.For precompiled C# functions, use the NotificationHub attribute, which is defined in NuGet package Microsoft.Azure.WebJobs.Extensions.NotificationHubs.

I parametri e le proprietà del costruttore dell'attributo sono descritte nella sezione Configurazione.The attribute's constructor parameters and properties are described in the configuration section.

ConfigurazioneConfiguration

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json e nell'attributo NotificationHub:The following table explains the binding configuration properties that you set in the function.json file and the NotificationHub attribute:

Proprietà di function.jsonfunction.json property Proprietà dell'attributoAttribute property DescrizioneDescription
typetype n/dn/a Deve essere impostato su "notificationHub".Must be set to "notificationHub".
directiondirection n/dn/a Deve essere impostato su "out".Must be set to "out".
nomename n/dn/a Nome della variabile usato nel codice della funzione per il messaggio dell'hub di notifica.Variable name used in function code for the notification hub message.
tagExpressiontagExpression TagExpressionTagExpression 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.Tag expressions allow you to specify that notifications be delivered to a set of devices that have registered to receive notifications that match the tag expression. Per altre informazioni, vedere Routing ed espressioni tag.For more information, see Routing and tag expressions.
hubNamehubName HubNameHubName Nome della risorsa dell'hub di notifica nel portale di Azure.Name of the notification hub resource in the Azure portal.
connessioneconnection ConnectionStringSettingConnectionStringSetting Nome di un'impostazione dell'app che contiene una stringa di connessione di Hub di notifica.The name of an app setting that contains a Notification Hubs connection string. La stringa di connessione deve essere impostata sul valore di DefaultFullSharedAccessSignature per l'hub di notifica.The connection string must be set to the DefaultFullSharedAccessSignature value for your notification hub. Vedere Configurazione della stringa di connessione più avanti in questo articolo.See Connection string setup later in this article.
platformplatform PiattaformaPlatform La proprietà platform indica la piattaforma client a cui è indirizzata la notifica.The platform property indicates the client platform your notification targets. 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.By default, if the platform property is omitted from the output binding, template notifications can be used to target any platform configured on the Azure Notification Hub. Per ulteriori informazioni sull'utilizzo dei modelli in generale per inviare notifiche tra piattaforme con un hub di notifica di Azure, vedere Modelli.For more information on using templates in general to send cross platform notifications with an Azure Notification Hub, see Templates. Se impostata, la proprietà platform deve avere uno dei valori seguenti:When set, platform must be one of the following values:

Quando si sviluppa in locale, le impostazioni dell'app vengono inserite nel file local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Esempio di file function.jsonfunction.json file example

Di seguito è riportato un esempio di un'associazione di Hub di notifica in un file function.json.Here's an example of a Notification Hubs binding in a function.json file.

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

Configurazione della stringa di connessioneConnection string setup

Per usare un'associazione di output dell'hub di notifica, è necessario configurare la stringa di connessione per l'hub.To use a notification hub output binding, you must configure the connection string for the hub. È possibile selezionare un hub di notifica esistente o crearne uno nuovo direttamente dalla scheda Integrazione nel portale di Azure.You can select an existing notification hub or create a new one right from the Integrate tab in the Azure portal. È anche possibile configurare manualmente la stringa di connessione.You can also configure the connection string manually.

Per configurare la stringa di connessione a un hub di notifica esistente:To configure the connection string to an existing notification hub:

  1. Passare all'hub di notifica nel portale di Azure, scegliere Criteri di accesso e selezionare il pulsante di copia accanto a DefaultFullSharedAccessSignature.Navigate to your notification hub in the Azure portal, choose Access policies, and select the copy button next to the DefaultFullSharedAccessSignature policy. In questo modo, la stringa di connessione per il criterio DefaultFullSharedAccessSignature viene copiata nell'hub di notifica.This copies the connection string for the DefaultFullSharedAccessSignature policy to your notification hub. Questa stringa di connessione consente alla funzione di inviare i messaggi di notifica all'hub.This connection string lets your function send notification messages to the hub. Copiare la stringa di connessione dell'hub di notificaCopy the notification hub connection string
  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.Navigate to your function app in the Azure portal, choose Application settings, add a key such as MyHubConnectionString, paste the copied DefaultFullSharedAccessSignature for your notification hub as the value, and then click Save.

Il nome di questa impostazione applicazione corrisponde all'impostazione di connessione dell'associazione di output in function.json o nell'attributo .NET.The name of this application setting is what goes in the output binding connection setting in function.json or the .NET attribute. Vedere la sezione Configurazione più indietro in questo articolo.See the Configuration section earlier in this article.

Quando si sviluppa in locale, le impostazioni dell'app vengono inserite nel file local.settings.json.When you're developing locally, app settings go into the local.settings.json file.

Passaggi successiviNext steps