Notification Hubs-utdatabindning för Azure Functions

Den här artikeln beskriver hur du skickar push-meddelanden med hjälp av Azure Notification Hubs-bindningar i Azure Functions. Azure Functions stöder utdatabindningar för Notification Hubs.

Azure Notification Hubs måste konfigureras för den plattformsmeddelandetjänst (PNS) som du vill använda. Information om hur du hämtar push-meddelanden i klientappen från Notification Hubs finns i Komma igång med Notification Hubs och välj målklientplattformen i listrutan längst upp på sidan.

Viktigt

Google har föråldrat Google Cloud Messaging (GCM) till förmån för Firebase Cloud Messaging (FCM). Den här utdatabindningen stöder inte FCM. Om du vill skicka meddelanden med FCM använder du Firebase-API: et direkt i din funktion eller använder mallaviseringar.

Paket – Functions 1.x

Notification Hubs-bindningarna tillhandahålls i NuGet-paketet Microsoft.Azure.WebJobs.Extensions.NotificationHubs version 1.x. Källkoden för paketet finns på GitHub-lagringsplatsen azure-webjobs-sdk-extensions .

I följande tabell beskrivs hur du lägger till stöd för den här bindningen i varje utvecklingsmiljö.

Utvecklingsmiljö Så här lägger du till support i
Functions 1.x
Lokal utveckling – C#-klassbibliotek Installera paketet
Lokal utveckling – C#-skript, JavaScript, F# Automatiskt
Portalutveckling Automatiskt

Paket – Functions 2.x och senare

Den här bindningen är inte tillgänglig i Functions 2.x och senare.

Exempel – mall

De meddelanden du skickar kan vara interna meddelanden eller mallaviseringar. Interna meddelanden riktar in sig på en specifik klientplattform enligt konfigurationen platform i egenskapen för utdatabindningen. Ett mallmeddelande kan användas för att rikta in sig på flera plattformar.

Se det språkspecifika exemplet:

Exempel på C#-skriptmall – out-parameter

Det här exemplet skickar ett meddelande för en mallregistrering som innehåller en message platshållare i mallen.

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

Exempel på C#-skriptmall – asynkron

Om du använder asynkron kod tillåts inte utdataparametrar. I det här fallet kan du använda IAsyncCollector för att returnera mallaviseringen. Följande kod är ett asynkront exempel på koden ovan.

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

Exempel på C#-skriptmall – JSON

Det här exemplet skickar ett meddelande för en mallregistrering som innehåller en message platshållare i mallen med hjälp av en giltig JSON-sträng.

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

Exempel på C#-skriptmall – bibliotekstyper

Det här exemplet visar hur du använder typer som definierats i Microsoft Azure Notification Hubs-biblioteket.

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

F#-mallexempel

Det här exemplet skickar ett meddelande för en mallregistrering som innehåller location och message.

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

Exempel på JavaScript-mall

Det här exemplet skickar ett meddelande för en mallregistrering som innehåller location och 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!"
    };
};

Exempel – APNS-inbyggt

Det här C#-skriptexemplet visar hur du skickar ett internt APNS-meddelande.

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

Exempel – WNS-inbyggt

Det här C#-skriptexemplet visar hur du använder typer som definierats i Microsoft Azure Notification Hubs-biblioteket för att skicka ett internt WNS-popup-meddelande.

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

Attribut

I C#-klassbibliotek använder du attributet NotificationHub .

Attributets konstruktorparametrar och egenskaper beskrivs i konfigurationsavsnittet.

Konfiguration

I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i filen function.json och NotificationHub attributet:

function.json-egenskap Attributegenskap Description
Typ saknas Måste anges till notificationHub.
Riktning saknas Måste anges till out.
Namn saknas Variabelnamn som används i funktionskoden för meddelandehubbens meddelande.
tagExpression TagExpression Med tagguttryck kan du ange att meddelanden ska levereras till en uppsättning enheter som har registrerats för att ta emot meddelanden som matchar tagguttrycket. Mer information finns i Routning och tagguttryck.
hubName HubName Namnet på meddelandehubbens resurs i Azure Portal.
anslutning ConnectionStringSetting Namnet på en appinställning som innehåller en Notification Hubs-anslutningssträng. Anslutningssträngen måste anges till värdet DefaultFullSharedAccessSignature för meddelandehubben. Se Konfiguration av anslutningssträng senare i den här artikeln.
Plattform Plattform Plattformsegenskapen anger klientplattformen som dina meddelandemål. Om plattformsegenskapen utelämnas från utdatabindningen kan mallmeddelanden som standard användas för att rikta in sig på valfri plattform som konfigurerats på Azure Notification Hub. Mer information om hur du använder mallar i allmänhet för att skicka plattformsoberoende meddelanden med en Azure Notification Hub finns i Mallar. När plattformen har angetts måste den vara ett av följande värden:

När du utvecklar lokalt lägger du till dina programinställningar i filen local.settings.json i Values samlingen.

function.json-filexempel

Här är ett exempel på en Notification Hubs-bindning i en function.json-fil .

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

Konfiguration av anslutningssträng

Om du vill använda en meddelandehubbens utdatabindning måste du konfigurera anslutningssträngen för hubben. Du kan välja en befintlig meddelandehubb eller skapa en ny direkt på fliken Integrera i Azure Portal. Du kan också konfigurera anslutningssträngen manuellt.

Så här konfigurerar du anslutningssträngen till en befintlig meddelandehubb:

  1. Gå till meddelandehubben i Azure Portal, välj Åtkomstprinciper och välj kopieringsknappen bredvid principen DefaultFullSharedAccessSignature. Detta kopierar anslutningssträngen för principen DefaultFullSharedAccessSignature till meddelandehubben. Med den här anslutningssträngen kan din funktion skicka meddelanden till hubben. Kopiera anslutningssträngen för meddelandehubben
  2. Gå till funktionsappen i Azure Portal, välj Programinställningar, lägg till en nyckel som MyHubConnectionString, klistra in den kopierade DefaultFullSharedAccessSignature för meddelandehubben som värde och klicka sedan på Spara.

Namnet på den här programinställningen är vad som finns i anslutningsinställningen för utdatabindning i function.json eller .NET-attributet. Se avsnittet Konfiguration tidigare i den här artikeln.

När du utvecklar lokalt lägger du till dina programinställningar i filen local.settings.json i Values samlingen.

Undantag och returkoder

Bindning Referens
Notification Hubs Åtgärdsguide

Nästa steg