Liaison de sortie Notification Hubs pour Azure Functions

Cet article explique comment envoyer des notifications Push à l’aide de liaisons Azure Notification Hubs dans Azure Functions. Azure Functions prend en charge les liaisons de sortie pour Notification Hubs.

Azure Notification Hubs doit être configuré pour l’infrastructure Platform Notification System (PNS) que vous souhaitez utiliser. Pour savoir comment obtenir des notifications Push dans votre application cliente provenant de Notification Hubs, consultez Prise en main de Notification Hubs et sélectionnez votre plateforme de client cible dans la liste déroulante en haut de la page.

Important

Google a décidé de déprécier Google Cloud Messaging (GCM) en faveur de Firebase Cloud Messaging (FCM). Cette liaison de sortie ne prend pas en charge FCM. Pour envoyer des notifications à l’aide de FCM, utilisez l’API Firebase directement dans votre fonction ou utilisez des notifications de modèle.

Packages - Functions 1.x

Les liaisons Notification Hubs sont fournies dans le package NuGet Microsoft.Azure.WebJobs.Extensions.NotificationHubs, version 1.x. Le code source du package se trouve dans le référentiel GitHub azure-webjobs-sdk-extensions.

Le tableau suivant indique comment ajouter la prise en charge de cette liaison dans chaque environnement de développement.

Environnement de développement Pour ajouter la prise en charge dans
Functions 1.x
Développement local - Bibliothèque de classes C# Installer le package.
Développement local - Script C#, JavaScript, F# Automatique
Développement sur le portail Automatique

Packages – Functions 2.x et versions ultérieures

Cette liaison n’est pas disponible dans Functions 2.x et ultérieur.

Exemple - modèle

Les notifications que vous envoyez peuvent être des notifications natives ou des notifications de modèle. Les notifications natives ciblent une plateforme cliente spécifique telle que configurée dans la propriété platform de la liaison de sortie. Un modèle de notification peut servir à plusieurs plateformes cibles.

Consultez l’exemple propre à un langage particulier :

Exemple de modèle de script C# - paramètre de sortie

Cet exemple envoie une notification pour une inscription de modèle contenant un emplacement réservé message dans le modèle.

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

Exemple de modèle de script C# - asynchrone

Si vous utilisez du code asynchrone, les paramètres de sortie ne sont pas autorisés. Dans ce cas, utilisez IAsyncCollector pour renvoyer votre notification modèle. Le code suivant est un exemple de code asynchrone ci-dessus.

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

Exemple de modèle de script C# - JSON

Cet exemple envoie une notification pour une inscription de modèle contenant un emplacement réservé message dans le modèle à l’aide d’une chaîne JSON valide.

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

Exemple de modèle de script C# - types de bibliothèque

Cet exemple indique comment utiliser le type défini dans la bibliothèque Microsoft Azure Notification Hubs.

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

Exemple de modèle F#

Cet exemple envoie une notification pour une inscription de modèles contenant location et message.

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

Exemple de modèle JavaScript

Cet exemple envoie une notification pour une inscription de modèles contenant location et 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!"
    };
};

Exemple - APNS natif

Cet exemple de script C# montre comment envoyer une notification APNS native.

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

Exemple - WNS natif

Cet exemple de script C# indique comment utiliser les types définis dans la bibliothèque Microsoft Azure Notification Hubs pour envoyer une notification toast WNS native.

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

Attributs

Dans les bibliothèques de classes C#, utilisez l’attribut NotificationHub.

Les paramètres de constructeur de l’attribut et les propriétés sont décrites dans la section Configuration.

Configuration

Le tableau suivant décrit les propriétés de configuration de liaison que vous définissez dans le fichier function.json et l’attribut NotificationHub :

Propriété function.json Propriété d’attribut Description
type n/a Cette propriété doit être définie sur notificationHub.
direction n/a Cette propriété doit être définie sur out.
name n/a Nom de variable utilisé dans le code de fonction pour le message du hub de notification.
tagExpression tagExpression Expressions de balise vous permettant de demander que les notifications soient remises à un ensemble d’appareils qui se sont inscrits pour la réception de notifications correspondant à l’expression de balise. Pour plus d’informations, voir Routage et expressions de balise.
hubName HubName Nom de la ressource de hub de notification dans le portail Azure.
connection ConnectionStringSetting Nom d’un paramètre d’application contenant une chaîne de connexion Notification Hubs. Vous devez définir la chaîne de connexion sur la valeur DefaultFullSharedAccessSignature de votre Hub de notification. Consultez Configuration de la chaîne de connexion plus loin dans cet article.
platform Plateforme La propriété de la plateforme indique la plateforme cliente ciblée par votre notification. Par défaut, si la propriété de la plateforme est omise dans la liaison de sortie, les notifications de modèle peuvent être utilisées pour cibler n’importe quelle plateforme configurée sur Azure Notification Hub. Pour en savoir plus sur l’utilisation de modèles en général pour envoyer entre des notifications entre plusieurs plateformes avec un Azure Notification Hub, consultez la rubrique Modèles. Une fois définie, platform doit avoir l’une des valeurs suivantes :

Lorsque vous développez en local, ajoutez vos paramètres d’application dans le fichier local.settings.json de la collection .

Exemple de fichier function.json

Voici un exemple de liaison Notification Hubs dans un fichier function.json.

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

Configuration de la chaîne de connexion

Pour utiliser une liaison de sortie de Hub de notification, vous devez configurer la chaîne de connexion pour le hub. Vous pouvez sélectionner un hub de notification existant ou en créer un nouveau sous l’onglet Intégrer du portail Azure. Vous pouvez également configurer la chaîne de connexion manuellement.

Pour configurer la chaîne de connexion sur un hub de notification existant :

  1. Accédez à votre hub de notification dans le portail Azure, choisissez Stratégies d’accès, puis sélectionnez le bouton Copier en regard de la stratégie DefaultFullSharedAccessSignature. Vous copiez ainsi la chaîne de connexion de la stratégie DefaultFullSharedAccessSignature dans votre hub de notification. Cette chaîne de connexion permet à votre fonction d’envoyer des messages de notification au hub. Copier la chaîne de connexion du hub de notification
  2. Accédez à votre application de fonction dans le portail Azure, choisissez Paramètres de l’application, ajoutez une clé telle que MyHubConnectionString, collez la stratégie DefaultFullSharedAccessSignature copiée dans votre hub de notification en tant que valeur, puis cliquez sur Enregistrer.

Le nom de ce paramètre d’application passe dans le paramètre de connexion de liaison de sortie dans le fichier function.json ou l’attribut .NET. Consultez la section Configuration plus haut dans cet article.

Lorsque vous développez en local, ajoutez vos paramètres d’application dans le fichier local.settings.json de la collection .

Exceptions et codes de retour

Liaison Informations de référence
Hub de notification Guide des opérations

Étapes suivantes