Dela via


Azure Notification Hubs-utdatabindningar 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.

Du måste konfigurera Notification Hubs för den plattformsmeddelandetjänst (PNS) som du vill använda. Mer information om hur du hämtar push-meddelanden i klientappen från Notification Hubs finns i Snabbstart: Konfigurera push-meddelanden i en meddelandehubb.

Viktigt!

Google har föråldrat Google Cloud Messaging (GCM) till förmån för Firebase Cloud Messaging (FCM). Utdatabindningar för Notification Hubs stöder dock 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 visas hur du lägger till stöd för utdatabindning i varje utvecklingsmiljö.

Utvecklingsmiljö Lägga till stöd i Functions 1.x
Lokal utveckling: C#-klassbibliotek Installera paketet
Lokal utveckling: C#-skript, JavaScript, F# Automatisk
Portalutveckling Automatisk

Paket: Functions 2.x och senare

Utdatabindning är inte tillgängligt i Functions 2.x och senare.

Exempelmall:

De meddelanden du skickar kan vara interna meddelanden eller mallaviseringar. Ett internt meddelande riktar sig till 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.

Mallexempel för varje språk:

Exempel på C#-skriptmall: out-parameter

Det här exemplet skickar ett meddelande om 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 använder du IAsyncCollector för att returnera mallmeddelandet. Följande kod är ett asynkront exempel på föregående exempel:

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 om en mallregistrering som innehåller en message platshållare i mallen med 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 inbyggt APNS-meddelande (Apple Push Notification Service):

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

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 (Windows Push Notification Service):

#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 avsnittet Konfiguration .

Konfiguration

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

function.json egenskap Attributegenskap beskrivning
typ saknas Ange till notificationHub.
riktning saknas Ange 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 är registrerade för att ta emot meddelanden som matchar tagguttrycket. Mer information finns i Routning och tagguttryck.
hubName HubName Namnet på meddelandehubbens resurs i Azure-portalen.
samband ConnectionStringSetting Namnet på en appinställning som innehåller en Notification Hubs-niska veze. Ange niska veze till värdet DefaultFullSharedAccessSignature för meddelandehubben. Mer information finns i Konfiguration av anslutningssträng.
plattform Plattform Plattformsegenskapen anger klientplattformens meddelandemål. Om plattformsegenskapen utelämnas från utdatabindningen kan mallmeddelanden som standard användas för att rikta in sig på alla plattformar som konfigurerats på Azure Notification Hub. Mer information om hur du använder mallar för att skicka plattformsoberoende meddelanden med en Azure Notification Hub finns i Notification Hubs-mallar. När plattformen har angetts måste det vara något av följande värden:

När du utvecklar lokalt lägger du till dina programinställningar i den local.settings.json filen 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 utdatabindning för meddelandehubben måste du konfigurera niska veze för hubben. Du kan välja en befintlig meddelandehubb eller skapa en ny från fliken Integrera i Azure-portalen. Du kan också konfigurera niska veze manuellt.

Så här konfigurerar du niska veze till en befintlig meddelandehubb:

  1. Gå till meddelandehubben i Azure-portalen, välj Åtkomstprinciper och välj kopieringsknappen bredvid principen DefaultFullSharedAccessSignature.

    Niska veze för principen DefaultFullSharedAccessSignature kopieras till meddelandehubben. Med den här niska veze kan din funktion skicka aviseringsmeddelanden till hubben. Skärmbild som visar hur du kopierar meddelandehubben niska veze.

  2. Gå till funktionsappen i Azure-portalen, expandera Inställningar och välj sedan Miljövariabler.

  3. På fliken Appinställning väljer du + Lägg till för att lägga till en nyckel, till exempel MyHubConnectionString. Inställningen Namn på den här appinställningen är anslutningsinställningen för utdatabindning i function.json eller .NET-attributet. Mer information finns i Konfiguration.

  4. För värdet klistrar du in den kopierade DefaultFullSharedAccessSignature-niska veze från meddelandehubben och väljer sedan Använd.

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

Undantag och returkoder

Bindning Referens
Notification Hubs Driftguide