分享方式:


Azure Functions 的 Azure 通知中樞輸出系結

本文說明如何在 Azure Functions 中使用 Azure 通知中樞 系結來傳送推播通知。 Azure Functions 支援通知中樞的輸出系結。

您必須為要使用的平臺通知服務 (PNS) 設定通知中樞。 如需如何在用戶端應用程式中從通知中樞取得推播通知的詳細資訊,請參閱 快速入門:在通知中樞中設定推播通知。

重要

Google 已 取代 Google 雲端通訊 (GCM),支援 Firebase 雲端通訊 (FCM) 。 不過,通知中樞的輸出系結不支援 FCM。 若要使用 FCM 傳送通知, 請直接在函式中使用 Firebase API 或使用 範本通知

套件:Functions 1.x

通知中樞系結是在 Microsoft.Azure.WebJobs.Extensions.NotificationHubs NuGet 套件 1.x 版中提供。 套件的原始碼位於 azure-webjobs-sdk-extensions GitHub 存放庫中。

下表列出如何在每個開發環境中新增輸出系結的支援。

開發環境 在 Functions 1.x 中新增支援
本機開發:C# 類別庫 安裝套件
本機開發:C# 腳本、JavaScript、F# 自動
入口網站開發 自動

套件:Functions 2.x 和更新版本

在 Functions 2.x 和更新版本中無法使用輸出系結。

範例:範本

您傳送的通知可以是原生通知或 範本通知。 原生通知是以特定用戶端平台為目標,如輸出系結的 屬性所 platform 設定。 範本通知可用來以多個平台為目標。

每個語言的範本範例:

C# 文稿範例:out 參數

此範例會傳送範本註冊的通知,其中包含message範本中的佔位元:

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

C# 文稿範例:異步

如果您使用異步程式代碼,則不允許 out 參數。 在此情況下,請使用 IAsyncCollector 傳回範本通知。 下列程式代碼是上一個範例的異步範例:

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

C# 文稿範例:JSON

此範例會使用有效的 JSON 字串,傳送範本註冊的通知,其中包含message範本中的佔位元:

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

C# 文稿範例:連結庫類型

此範例示範如何使用 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);
}

F# 範例

此範例會傳送包含 和 messagelocation範本註冊通知:

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

JavaScript 範例

此範例會傳送包含 和 messagelocation範本註冊通知:

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

範例:APNS 原生

此 C# 文稿範例示範如何傳送原生 Apple 推播通知服務 (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));        
}

範例:WNS 原生

此 C# 腳本範例示範如何使用 Microsoft Azure 通知中 樞連結庫中 定義的類型來傳送原生 Windows 推播通知服務 (WNS) 快顯通知:

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

屬性

C# 類別庫中,使用 NotificationHub 屬性。

屬性的建構函式參數和屬性會在組態節中描述。

組態

下表列出您在 function.json 檔案與 NotificationHub 屬性中設定的系結組態屬性:

function.json 屬性 屬性內容 描述
type n/a 設定為 notificationHub
direction n/a 設定為 out
name n/a 通知中樞訊息函式程式碼中使用的變數名稱。
tagExpression TagExpression 標記表達式可讓您指定將通知傳遞至一組已註冊以接收符合標籤運算式之通知的裝置。 如需詳細資訊,請參閱 路由和標記表達式
hubName HubName Azure 入口網站 中的通知中樞資源名稱。
connection ConnectionStringSetting 包含通知中樞 連接字串 的應用程式設定名稱。 將 連接字串 設定為通知中樞的 DefaultFullSharedAccessSignature 值。 如需詳細資訊,請參閱 連接字串設定
平台 平台 平台屬性表示您的通知目標客戶端平臺。 根據預設,如果輸出系結省略平臺屬性,範本通知可用來以 Azure 通知中樞上設定的任何平臺為目標。 如需使用範本搭配 Azure 通知中樞傳送跨平臺通知的詳細資訊,請參閱 通知中樞範本。 設定平臺,它必須是下列其中一個值:

當您在本機開發時,請在集合中的 local.settings.json 檔案Values中新增應用程式設定。

function.json檔案範例

以下是function.json檔案中通知中樞系結的範例:

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

連接字串設定

若要使用通知中樞輸出系結,您必須設定中樞的 連接字串。 您可以選取現有的通知中樞,或從 Azure 入口網站 的 [整合] 索引標籤建立新的通知中樞。 您也可以手動設定 連接字串。

若要將 連接字串 設定為現有的通知中樞:

  1. 流覽至 Azure 入口網站 中的通知中樞,選擇 [存取原則],然後選取 DefaultFullSharedAccessSignature 原則旁的 [複製] 按鈕。

    DefaultFullSharedAccessSignature 原則的 連接字串 會複製到通知中樞。 此 連接字串 可讓您的函式將通知訊息傳送至中樞。 顯示如何複製通知中樞 連接字串 的螢幕快照。

  2. 流覽至 Azure 入口網站 中的函式應用程式,展開 [設定],然後選取 [環境變數]。

  3. 從 [應用程式設定] 索引標籤中,選取 [+ 新增] 以新增 MyHubConnectionString密鑰。 應用程式設定的名稱是 function.json 或 .NET 屬性中的輸出系結連線設定。 如需詳細資訊,請參閱組態

  4. 針對值,從通知中樞貼上複製的 DefaultFullSharedAccessSignature 連接字串,然後選取 [套用]。

當您在本機開發時,請在集合中的 local.settings.json 檔案Values中新增應用程式設定。

例外狀況和傳回碼

繫結 參考
通知中樞 操作指南