Поделиться через


Пакет SDK для Центров уведомлений Azure для JavaScript

Центры уведомлений Azure предоставляют масштабируемую подсистему push-уведомлений, которая позволяет отправлять уведомления на любую платформу (Apple, Amazon Kindle, Firebase, Baidu, Xiaomi, Web, Windows и т. д.) из любой серверной части (облачной или локальной). Концентраторы уведомлений хорошо подходят как для корпоративных, так и для потребительских сценариев. Вот несколько примеров сценариев:

  • Отправляйте уведомления о последних новостях миллионам людей с низкой задержкой.
  • Отправляйте купоны на основе местоположения заинтересованным сегментам пользователей.
  • Отправляйте уведомления о событиях пользователям или группам для приложений СМИ/спорта/финансов/игр.
  • Размещайте рекламный контент в приложениях для привлечения клиентов и их маркетинга.
  • Уведомляйте пользователей о корпоративных событиях, таких как новые сообщения и рабочие элементы.
  • Отправка кодов для многофакторной аутентификации.

Ключевые ссылки:

ПРИМЕЧАНИЕ: Если вы переходите от использования пакета azure-sb , см. migration guide to move from azure-sb to @azure/notification-hubs

Начало работы

Поддерживаемые в настоящее время среды

Чтобы получить дополнительные сведения, ознакомьтесь с нашей политикой поддержки.

Установите пакет

npm install @azure/notification-hubs

Предпосылки

Создание ресурса Центров уведомлений Azure

Концентратор уведомлений Azure можно создать с помощью следующих способов:

  1. Портал Azure
  2. Azure CLI
  3. Бицепс
  4. Шаблон ARM

После создания концентратор уведомлений можно настроить с помощью портала Azure или Azure CLI.

Импорт клиента

Этот пакет SDK для JavaScript предлагает два способа взаимодействия с центрами уведомлений Azure: либо на основе классов, либо с помощью модульного подхода к проектированию. Подход, основанный на классах, согласован во всех пакетах для создания клиента и последующего взаимодействия с методами клиента.

import { NotificationHubsClient, createAppleInstallation } from "@azure/notification-hubs";

const client = new NotificationHubsClient("<connection string>", "<hub name>");

const installation = createAppleInstallation({
  installationId: "<installation-id>",
  pushChannel: "<push-channel>",
  tags: ["likes_javascript"],
});

const result = await client.createOrUpdateInstallation(installation);

Модульный подход позволяет разработчику выбирать, какие функции импортировать, поскольку каждый метод предоставляется отдельно. Этот подход использует экспорт подпутов с ES-Modules для предоставления методов через прямой импорт. При использовании отдельных экспортов это обеспечивает лучший опыт встряхивания деревьев и меньшие размеры пакетов, которыми может воспользоваться разработчик.

Обратите внимание, что создание клиента предоставляется через подпуть, "@azure/notification-hubs/api" а все методы клиента предоставляются через "@azure/notification-hubs/api" подпуть. Каждая экспортируемая функция принимает в качестве первого параметра, client а остальные параметры остаются неизменными.

Доступны следующие подпути:

  • @azure/notification-hubs/api - Основная точка входа для клиента через createClientContext и методы клиента, такие как getInstallation или sendNotification
  • @azure/notification-hubs/models - Модели концентраторов уведомлений и заводские методы.

Приведенный выше фрагмент кода выглядит следующим образом:

import { createClientContext, createOrUpdateInstallation } from "@azure/notification-hubs/api";
import { createAppleInstallation } from "@azure/notification-hubs";

const context = createClientContext("<connection string>", "<hub name>");

const installation = createAppleInstallation({
  installationId: "<installation-id>",
  pushChannel: "<push-channel>",
  tags: ["likes_javascript"],
});

const result = await createOrUpdateInstallation(context, installation);

аутентификация клиента;

Взаимодействие с концентратором уведомлений Azure начинается с NotificationHubsClient того, который поддерживает строки подключения подписанного URL-адреса. Это включает в себя следующие уровни разрешений: Прослушивание, Управление, Отправка.

Listen позволяет клиенту зарегистрироваться через Registration and Installations API. Send позволяет клиенту отправлять уведомления на устройства с помощью API отправки. Наконец, функция «Управление» позволяет пользователю выполнять управление регистрацией и установкой, например выполнять запросы.

Новый NotificationHubsClient клиент может быть создан с помощью конструктора со строкой подключения и именем Notification Hub.

import { NotificationHubsClient } from "@azure/notification-hubs";

const client = new NotificationHubsClient("<connection string>", "<hub name>");

Используя модульный подход, они createClientContext могут быть импортированы "@azure/notification-hubs/api" через подпуть.

import { createClientContext } from "@azure/notification-hubs/api";

const context = createClientContext("<connection string>", "<hub name>");

Основные понятия

NotificationHubClient После инициализации можно изучить следующие концепции.

  • Управление устройствами через установку и регистрациюОписания
  • Отправка уведомлений на устройства

Управление устройствами

Управление устройствами — это основная концепция концентраторов уведомлений, позволяющая хранить уникальный идентификатор из встроенной службы уведомлений платформы (PNS), такой как APNs или Firebase, и связанные метаданные, такие как теги, используемые для отправки push-уведомлений аудитории. Это делается с помощью двух API: Installation API, который является более новым и предпочтительным механизмом, и Registrations.

API установок

Установки — это более новый и нативный подход JSON к управлению устройствами, который содержит дополнительные свойства, такие как идентификатор установки и идентификатор пользователя, которые можно использовать для отправки аудитории. API установки имеет несколько преимуществ по сравнению с существующими API регистрации в следующих аспектах:

  • Полностью идемпотентный API, поэтому вызов create при установке, чтобы можно было повторить операцию, не беспокоясь о дублировании.
  • Поддержка userId свойств и installationId , которые затем можно использовать в выражениях тегов, таких как $InstallationId:{myInstallId} и $UserId:{bob@contoso.com}.
  • Шаблоны теперь являются частью установки, а не отдельной регистрацией, и на них можно ссылаться по имени в качестве тега для отправки.
  • Частичные обновления поддерживаются с помощью стандарта JSON Patch Standard, который позволяет добавлять теги и изменять другие данные без предварительного запроса к установке.

Установки могут быть созданы с помощью createOrUpdateInstallation следующего метода:

import { NotificationHubsClient, createAppleInstallation } from "@azure/notification-hubs";

const client = new NotificationHubsClient("<connection string>", "<hub name>");

// Create an installation for APNs
const installation = createAppleInstallation({
  installationId: "0d8ab095-c449-493f-9195-17e4917806c4", // Must be unique
  pushChannel: "00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0", // PNS specific handle
  tags: ["likes_hockey", "likes_football"],
});

const response = await client.createOrUpdateInstallation(installation);

При использовании модульного подхода код будет выглядеть следующим образом:

import { createClientContext, createOrUpdateInstallation } from "@azure/notification-hubs/api";
import { createAppleInstallation } from "@azure/notification-hubs";

const context = createClientContext("<connection string>", "<hub name>");

// Create an installation for APNs
const installation = createAppleInstallation({
  installationId: "0d8ab095-c449-493f-9195-17e4917806c4", // Must be unique
  pushChannel: "00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0", // PNS specific handle
  tags: ["likes_hockey", "likes_football"],
});

const response = await createOrUpdateInstallation(context, installation);

Обновление установки можно выполнить с помощью схемы исправления JSON, например путем добавления тега и идентификатора пользователя с помощью этого метода updateInstallation .

import { NotificationHubsClient, JsonPatch } from "@azure/notification-hubs";

const client = new NotificationHubsClient("<connection string>", "<hub name>");

const installationId = "<unique installation ID>";
const updates: JsonPatch[] = [
  { op: "add", path: "/tags", value: "likes_baseball" },
  { op: "add", path: "/userId", value: "bob@contoso.com" },
];

const installation = await client.updateInstallation(installationId, updates);

При использовании модульного подхода код будет выглядеть следующим образом:

import { createClientContext, updateInstallation } from "@azure/notification-hubs/api";
import { JsonPatch } from "@azure/notification-hubs";

const context = createClientContext("<connection string>", "<hub name>");

const installationId = "<unique installation ID>";

const updates: JsonPatch[] = [
  { op: "add", path: "/tags", value: "likes_baseball" },
  { op: "add", path: "/userId", value: "bob@contoso.com" },
];

const installation = await updateInstallation(context, installationId, updates);

Чтобы получить существующую установку, используйте метод с существующим уникальным идентификатором getInstallation установки.

import { NotificationHubsClient } from "@azure/notification-hubs";

const client = new NotificationHubsClient("<connection string>", "<hub name>");

const installationId = "<unique installation ID>";

const installation = client.getInstallation(installationId);

При использовании модульного подхода код будет выглядеть следующим образом:

import { createClientContext, getInstallation } from "@azure/notification-hubs/api";

const context = createClientContext("<connection string>", "<hub name>");

const installationId = "<unique installation ID>";

const installation = getInstallation(context, installationId);

API регистраций

Регистрация связана с PNS так же, как и описанная выше установка, с уникальным идентификатором устройства из PNS и связанными с ним тегами. Регистрация шаблонов — это способ создания предопределенных шаблонов тела, которые затем могут быть настроены во время отправки со свойствами для заполнения сообщения. Дополнительные сведения о шаблонах см. в документации по шаблонам.

Установка может быть создана одним из двух способов, сначала путем получения регистрационного идентификатора с сервера с помощью getInstallationId , а затем createOrUpdateRegistration или с помощью этого метода createRegistration .

import {
  NotificationHubsClient,
  createAppleRegistrationDescription,
} from "@azure/notification-hubs";

const client = new NotificationHubsClient("<connection string>", "<hub name>");

const registration = createAppleRegistrationDescription({
  deviceToken: "00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0",
  tags: ["likes_hockey", "likes_football"],
});
const updatedRegistration = await client.createRegistration(registration);

При использовании модульного подхода код будет выглядеть следующим образом:

import { createClientContext, createRegistration } from "@azure/notification-hubs/api";
import { createAppleRegistrationDescription } from "@azure/notification-hubs";

const context = createClientContext("<connection string>", "<hub name>");

const registration = createAppleRegistrationDescription({
  deviceToken: "00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0",
  tags: ["likes_hockey", "likes_football"],
});

const updatedRegistration = await createRegistration(context, registration);

Обновления могут быть выполнены с помощью этого метода updateRegistration , но, в отличие от установки, он не поддерживает добавочные обновления. Запрос на существующую регистрацию может быть выполнен с помощью метода getRegistration .

import { NotificationHubsClient } from "@azure/notification-hubs";

const client = new NotificationHubsClient("<connection string>", "<hub name>");

const registrationId = "<unique Registration ID>";

const registration = await client.getRegistration(registrationId);

if (registration.tags) {
  registration.tags.push("likes_sports");
} else {
  registration.tags = ["likes_sports"];
}

const updatedRegistration = await client.updateRegistration(registration);

При использовании модульного подхода код будет выглядеть следующим образом:

import {
  createClientContext,
  getRegistration,
  updateRegistration,
} from "@azure/notification-hubs/api";

const context = createClientContext("<connection string>", "<hub name>");

const registrationId = "<unique Registration ID>";

const registration = await getRegistration(context, registrationId);

if (registration.tags) {
  registration.tags.push("likes_sports");
} else {
  registration.tags = ["likes_sports"];
}

const updatedRegistration = await updateRegistration(context, registration);

Регистрации, в отличие от установок, могут запрашиваться для получения всех регистраций, сопоставления регистраций с условием или по тегам. Запросы к регистрациям можно выполнять с listRegistrationsпомощью метода , listRegistrationsByChannel and listRegistrationsByTag . Все методы поддерживают ограничение через top опцию и поддерживают асинхронную разбиение на страницы.

import { NotificationHubsClient } from "@azure/notification-hubs";

const client = new NotificationHubsClient("<connection string>", "<hub name>");

const registrations = client.listRegistrationsByTag("likes_hockey");

let page = 0;
for await (const pages of registrations.byPage()) {
  console.log(`Page number ${page++}`);
  for (const item of pages) {
    console.log(JSON.stringify(item, null, 2));
  }
}

При использовании модульного подхода код будет выглядеть следующим образом:

import { createClientContext, listRegistrationsByTag } from "@azure/notification-hubs/api";

const context = createClientContext("<connection string>", "<hub name>");

const registrations = await listRegistrationsByTag(context, "likes_hockey");

let page = 0;
for await (const pages of registrations.byPage()) {
  console.log(`Page number ${page++}`);
  for (const item of pages) {
    console.log(JSON.stringify(item, null, 2));
  }
}

Отправка операций

Центры уведомлений поддерживают отправку уведомлений на устройства напрямую с использованием уникального идентификатора, предоставленного PNS, с помощью тегов для отправки аудитории или общей широковещательной передачи на все устройства. Используя номер SKU "Стандартный" и более поздних версий, запланированная отправка позволяет пользователю планировать уведомления на семь дней вперед. Все операции отправки возвращают идентификатор отслеживания и идентификатор корреляции, которые можно использовать для обращений в службу поддержки концентраторов уведомлений. При использовании номера SKU "Стандартный" и более поздних версий также возвращается идентификатор уведомления, который можно использовать для получения телеметрии уведомлений с помощью этого метода getNotificationOutcomeDetails .

В целях отладки можно задать параметры, enableTestSend которые true получают немедленную обратную связь от PNS о методе sendNotification , однако не поддерживаются в рабочих сценариях. Это не поддерживается в запланированных методах отправки.

Необработанные строки JSON или XML могут быть отправлены в методы send или scheduled send, или могут быть использованы построители уведомлений, которые помогают создавать сообщения для PNS, такие как APNs, Firebase, Baidu, ADM и WNS. Эти сборщики создадут собственный формат сообщений, поэтому не нужно гадать, какие поля доступны для каждой PNS.

import { createAppleNotificationBody, createAppleNotification } from "@azure/notification-hubs";

const apnsBody = createAppleNotificationBody({
  alert: {
    title: "Notification Title",
    subtitle: "Notification Subtitle",
    body: "Notification body goes here",
  },
  sound: "default",
  interruptionLevel: "time-sensitive",
});

// Send the message using the modular approach
const notification = createAppleNotification({
  body: apnsBody,
});

Широковещательная отправка

Концентраторы уведомлений можно использовать для отправки уведомлений на все зарегистрированные устройства на каждой платформе с помощью метода широковещательной sendBroadcastNotification рассылки.

import { NotificationHubsClient, createAppleNotification } from "@azure/notification-hubs";

const client = new NotificationHubsClient("<connection string>", "<hub name>");

const messageBody = `{ "aps" : { "alert" : "Hello" } }`;

const message = createAppleNotification({
  body: messageBody,
  headers: {
    "apns-priority": "10",
    "apns-push-type": "alert",
  },
});

const result = await client.sendBroadcastNotification(message);

console.log(`Tracking ID: ${result.trackingId}`);
console.log(`Correlation ID: ${result.correlationId}`);

// Only available in Standard SKU and above
if (result.notificationId) {
  console.log(`Notification ID: ${result.notificationId}`);
}

При использовании модульного подхода код будет выглядеть следующим образом:

import { createClientContext, sendBroadcastNotification } from "@azure/notification-hubs/api";
import { createAppleNotification } from "@azure/notification-hubs";

const context = createClientContext("<connection string>", "<hub name>");

const messageBody = `{ "aps" : { "alert" : "Hello" } }`;

const message = createAppleNotification({
  body: messageBody,
  headers: {
    "apns-priority": "10",
    "apns-push-type": "alert",
  },
});

const result = await sendBroadcastNotification(context, message);

console.log(`Tracking ID: ${result.trackingId}`);
console.log(`Correlation ID: ${result.correlationId}`);

// Only available in Standard SKU and above
if (result.notificationId) {
  console.log(`Notification ID: ${result.notificationId}`);
}

Прямая отправка

Чтобы отправить напрямую устройство, пользователь может отправить с помощью предоставленного платформой уникального идентификатора, такого как токен устройства APNs, вызвав sendNotification метод с параметром deviceHandle .

import { NotificationHubsClient, createAppleNotification } from "@azure/notification-hubs";

const client = new NotificationHubsClient("<connection string>", "<hub name>");

const deviceHandle = "00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0";
const messageBody = `{ "aps" : { "alert" : "Hello" } }`;

const message = createAppleNotification({
  body: messageBody,
  headers: {
    "apns-priority": "10",
    "apns-push-type": "alert",
  },
});

const result = await client.sendNotification(message, { deviceHandle });

console.log(`Tracking ID: ${result.trackingId}`);
console.log(`Correlation ID: ${result.correlationId}`);

// Only available in Standard SKU and above
if (result.notificationId) {
  console.log(`Notification ID: ${result.notificationId}`);
}

При использовании модульного подхода код будет выглядеть следующим образом:

import { createClientContext, sendNotification } from "@azure/notification-hubs/api";
import { createAppleNotification } from "@azure/notification-hubs";

const context = createClientContext("<connection string>", "<hub name>");

const deviceHandle = "00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0";
const messageBody = `{ "aps" : { "alert" : "Hello" } }`;

const message = createAppleNotification({
  body: messageBody,
  headers: {
    "apns-priority": "10",
    "apns-push-type": "alert",
  },
});

const result = await sendNotification(context, message, { deviceHandle });

console.log(`Tracking ID: ${result.trackingId}`);
console.log(`Correlation ID: ${result.correlationId}`);

// Only available in Standard SKU and above
if (result.notificationId) {
  console.log(`Notification ID: ${result.notificationId}`);
}

Отправить аудитории

Помимо таргетинга на одно устройство, пользователь может настроить таргетинг на несколько устройств с помощью тегов. Эти теги могут быть предоставлены в виде списка тегов, который затем создает выражение тега для сопоставления зарегистрированных устройств, или в виде выражения тега, которое затем может использовать булеву логику для таргетинга нужной аудитории. Дополнительные сведения о тегах и выражениях тегов см. в разделе Маршрутизация и выражения тегов.

Если вы хотите создать выражение тега из массива тегов, существует Построитель выражений тегов с методом createTagExpression , который предоставляется на верхнем уровне импорта или @azure/notification-hubs/models/tagExpressionBuilder модульного импорта, который создает «выражение или тега» из тегов.

import { createTagExpression } from "@azure/notification-hubs";

const tags = ["likes_football", "likes_hockey"];
const tagExpression = createTagExpression(tags);

console.log(tagExpression);

Сообщения с выражениями тегов могут отправляться с помощью следующего кода:

import { NotificationHubsClient, createAppleNotification } from "@azure/notification-hubs";

const client = new NotificationHubsClient("<connection string>", "<hub name>");

const tagExpression = "likes_hockey && likes_football";
const messageBody = `{ "aps" : { "alert" : "Hello" } }`;

const notification = createAppleNotification({
  body: messageBody,
  headers: {
    "apns-priority": "10",
    "apns-push-type": "alert",
  },
});

const result = await client.sendNotification(notification, { tagExpression });

console.log(`Tracking ID: ${result.trackingId}`);
console.log(`Correlation ID: ${result.correlationId}`);

// Only available in Standard SKU and above
if (result.notificationId) {
  console.log(`Notification ID: ${result.notificationId}`);
}

При использовании модульного подхода код будет выглядеть следующим образом:

import { createClientContext, sendNotification } from "@azure/notification-hubs/api";
import { createAppleNotification } from "@azure/notification-hubs";

const context = createClientContext("<connection string>", "<hub name>");

const tagExpression = "likes_hockey && likes_football";
const messageBody = `{ "aps" : { "alert" : "Hello" } }`;

const notification = createAppleNotification({
  body: messageBody,
  headers: {
    "apns-priority": "10",
    "apns-push-type": "alert",
  },
});

const result = await sendNotification(context, notification, { tagExpression });

console.log(`Tracking ID: ${result.trackingId}`);
console.log(`Correlation ID: ${result.correlationId}`);

// Only available in Standard SKU and above
if (result.notificationId) {
  console.log(`Notification ID: ${result.notificationId}`);
}

Запланированная отправка

Push-уведомления можно запланировать за семь дней с помощью пространств имен SKU уровня "Стандартный" и выше с помощью метода отправки на устройства с тегами scheduleNotification или общей трансляции с помощью scheduleBroadcastNotification. Он возвращает идентификатор уведомления, который затем может быть использован для отмены при необходимости с помощью метода cancelScheduledNotification .

import { NotificationHubsClient, createAppleNotification } from "@azure/notification-hubs";

const client = new NotificationHubsClient("<connection string>", "<hub name>");

const tagExpression = "likes_hockey && likes_football";
const messageBody = `{ "aps" : { "alert" : "Hello" } }`;

// Schedule 8 hours from now
const scheduledTime = new Date(Date.now() + 8 * 60 * 60 * 1000);

const message = createAppleNotification({
  body: messageBody,
  headers: {
    "apns-priority": "10",
    "apns-push-type": "alert",
  },
});

const result = await client.scheduleNotification(scheduledTime, message, { tagExpression });

console.log(`Tracking ID: ${result.trackingId}`);
console.log(`Correlation ID: ${result.correlationId}`);

// Can be used to cancel via the cancelScheduledSend method
console.log(`Notification ID: ${result.notificationId}`);

При использовании модульного подхода код будет выглядеть следующим образом:

import { createClientContext, scheduleNotification } from "@azure/notification-hubs/api";
import { createAppleNotification } from "@azure/notification-hubs";

const context = createClientContext("<connection string>", "<hub name>");

const tagExpression = "likes_hockey && likes_football";
const messageBody = `{ "aps" : { "alert" : "Hello" } }`;

// Schedule 8 hours from now
const scheduledTime = new Date(Date.now() + 8 * 60 * 60 * 1000);

const message = createAppleNotification({
  body: messageBody,
  headers: {
    "apns-priority": "10",
    "apns-push-type": "alert",
  },
});

const result = await scheduleNotification(context, scheduledTime, message, { tagExpression });

console.log(`Tracking ID: ${result.trackingId}`);
console.log(`Correlation ID: ${result.correlationId}`);

// Can be used to cancel via the cancelScheduledSend method
console.log(`Notification ID: ${result.notificationId}`);

Устранение неполадок

Поддержка React Native

React Native в настоящее время не поддерживает [URLSearchParams], который используется пакетом SDK для Azure Notification Hubs. Чтобы использовать SDK в React Native, вам потребуется установить url-search-params-polyfill пакет и импортировать его перед использованием SDK.

Нам также необходимо предоставить полифилл для TextEncoder API и асинхронный итератор API. Пожалуйста, ознакомьтесь с нашим примером React Native с Expo для получения более подробной информации.

Диагностика уведомлений об отброшенных сообщениях

В Azure Notification Hubs есть полное руководство по устранению неполадок, связанных с отброшенными уведомлениями, в руководстве по диагностике отброшенных уведомлений в Azure Notification Hubs.

Тестовая отправка поддерживается в методах sendNotification и sendBroadcastNotification с enableTestSend опцией:

import { NotificationHubsClient, createAppleNotification } from "@azure/notification-hubs";

const client = new NotificationHubsClient("<connection string>", "<hub name>");

const tagExpression = "likes_hockey && likes_football";
const messageBody = `{ "aps" : { "alert" : "Hello" } }`;

const notification = createAppleNotification({
  body: messageBody,
  headers: {
    "apns-priority": "10",
    "apns-push-type": "alert",
  },
});

const result = await client.sendNotification(notification, {
  tagExpression,
  enableTestSend: true,
});
import { createClientContext, sendNotification } from "@azure/notification-hubs/api";
import { createAppleNotification } from "@azure/notification-hubs";

const context = createClientContext("<connection string>", "<hub name>");

const tagExpression = "likes_hockey && likes_football";
const messageBody = `{ "aps" : { "alert" : "Hello" } }`;

const notification = createAppleNotification({
  body: messageBody,
  headers: {
    "apns-priority": "10",
    "apns-push-type": "alert",
  },
});

const result = await sendNotification(context, notification, {
  tagExpression,
  enableTestSend: true,
});

Logging

Включение ведения журнала может помочь выявить полезные сведения о сбоях. Чтобы просмотреть журнал HTTP-запросов и ответов, задайте для переменной среды AZURE_LOG_LEVEL значение info. В альтернативном порядке, логирование можно включить во время выполнения, вызвав setLogLevel в @azure/logger:

import { setLogLevel } from "@azure/logger";

setLogLevel("info");

Дополнительные инструкции по включению журналов см. в документации по пакету @azure/loger.

Дальнейшие шаги

В следующих примерах показаны различные способы взаимодействия с центрами уведомлений Azure.

Управление устройствами:

Операции отправки:

Управленческие операции:

Contributing

Если вы хотите внести свой вклад в эту библиотеку, ознакомьтесь с руководством по созданию и тестированию кода.

Тесты этого модуля представляют собой смесь динамических и модульных тестов, для которых требуется наличие экземпляра Azure Notification Hubs. Чтобы выполнить тесты, вам нужно выполнить:

  1. pnpm install
  2. pnpm build --filter @azure/notification-hubs...
  3. Создайте в папке sdk\notificationhubs\notification-hubs файл .env со следующим содержимым: NOTIFICATIONHUBS_CONNECTION_STRING=connection string for your Notification Hubs instanceNOTIFICATION_HUB_NAME=Notification Hub name
  4. cd sdk\notificationhubs\notification-hubs
  5. npm run test.

Просмотрите нашу папку тестов для получения более подробной информации.