Share via


SDK de Azure Notification Hubs para JavaScript

Azure Notification Hubs proporciona un motor de inserción escalado horizontal que le permite enviar notificaciones a cualquier plataforma (Apple, Amazon Kindle, Firebase, Baidu, Xiaomi, Web, Windows, etc.) desde cualquier back-end (nube o local). Notification Hubs funciona bien en escenarios empresariales y de consumidor. Estos son algunos escenarios de ejemplo:

  • Enviar notificaciones de noticias de última hora a millones de usuarios con baja latencia.
  • Enviar cupones basados en la ubicación a segmentos de usuarios interesados.
  • Enviar notificaciones relacionadas con eventos a usuarios o grupos para aplicaciones de medios, deportivas, de finanzas o de juegos.
  • Inserte contenido promocional en aplicaciones para ponerse en contacto y comercializar con clientes.
  • Informar a los usuarios sobre eventos empresariales como nuevos mensajes o elementos de trabajo.
  • Enviar códigos para Multi-Factor Authentication.

Vínculos principales:

NOTA: Si viene del uso del azure-sb paquete, consulte el migration guide to move from azure-sb to @azure/notification-hubs

Introducción

Entornos admitidos actualmente

Para más información, consulte la directiva de compatibilidad.

Instalar el paquete

npm install @azure/notification-hubs

Requisitos previos

Create un recurso de Azure Notification Hubs

Se puede crear un centro de notificaciones de Azure mediante los métodos siguientes:

  1. Azure Portal
  2. CLI de Azure
  3. Bicep
  4. Plantilla de ARM

Una vez creado, el Centro de notificaciones se puede configurar mediante Azure Portal o la CLI de Azure.

Importación del cliente

Este SDK para JavaScript ofrece dos maneras de interactuar con Azure Notification Hubs, ya sea a través del enfoque basado en clases o con un enfoque de diseño modular. El enfoque basado en clases es coherente en todos los paquetes para crear un cliente y, a continuación, interactuar con los métodos en el cliente.

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

El enfoque modular permite al desarrollador elegir y elegir qué funciones importar a medida que cada método se expone individualmente. Este enfoque usa exportaciones de subrutas con ES-Modules para exponer los métodos a través de importaciones directas. Con las exportaciones individuales, esto crea una mejor experiencia de agitación de árboles y tamaños de agrupación más pequeños que el desarrollador puede aprovechar.

Tenga en cuenta que la creación de un cliente se expone a través de la "@azure/notification-hubs/api" subruta y todos los métodos de cliente se exponen a través de la "@azure/notification-hubs/api" subruta. Cada función exportada toma como client primer parámetro y el resto de los parámetros permanecen sin cambios.

Se exponen las subrutas siguientes:

  • @azure/notification-hubs/api - El punto de entrada principal para el cliente a través createClientContext de y métodos de cliente como getInstallation o sendNotification
  • @azure/notification-hubs/models - Los modelos de Notification Hubs y los métodos de fábrica.

A continuación, el fragmento de código anterior se convierte en el siguiente:

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

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

Autenticar el cliente

La interacción con un centro de notificaciones de Azure comienza con el NotificationHubsClient que admite cadenas de conexión de firma de acceso compartido. Esto incluye los siguientes niveles de permisos: Escuchar, Administrar y Enviar.

La escucha permite que un cliente se registre a sí mismo a través de la API de registro e instalaciones. Enviar permite al cliente enviar notificaciones a dispositivos mediante las API de envío. Por último, Administrar permite al usuario realizar la administración del registro y la instalación, como las consultas.

Se puede crear un nuevo NotificationHubsClient cliente mediante el constructor con el cadena de conexión y el nombre del Centro de notificaciones.

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

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

Mediante el enfoque modular, createClientContext se puede importar a través de la "@azure/notification-hubs/api" subruta.

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

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

Conceptos clave

NotificationHubClient Una vez inicializado, se pueden explorar los conceptos siguientes.

  • Administración de dispositivos a través de instalaciones y registrationDescriptions
  • Envío de notificaciones a dispositivos

Administración de dispositivos

La administración de dispositivos es un concepto básico de Notification Hubs para poder almacenar el identificador único del servicio de notificaciones de plataforma nativo (PNS), como APNs o Firebase, y metadatos asociados, como etiquetas usadas para enviar notificaciones push a audiencias. Esto se hace con dos API, la API de instalación, que es el mecanismo más reciente y preferido, y registros.

API de instalaciones

Las instalaciones son un enfoque JSON más reciente y nativo para la administración de dispositivos que contiene propiedades adicionales, como un identificador de instalación y un identificador de usuario que se pueden usar para enviar a audiencias. La API de instalaciones tiene algunas ventajas sobre las API de registro existentes de las siguientes maneras:

  • API totalmente idempotente para llamar a create en la instalación, por lo que se puede reintentar una operación sin preocuparse por las duplicaciones.
  • Compatibilidad con userId las propiedades y installationId que se pueden usar después en expresiones de etiqueta como $InstallationId:{myInstallId} y $UserId:{bob@contoso.com}.
  • Las plantillas ahora forman parte de la instalación en lugar de un registro independiente y se pueden hacer referencia por nombre como etiqueta para enviar.
  • Las actualizaciones parciales se admiten mediante json Patch Standard, lo que permite agregar etiquetas y cambiar otros datos sin tener que consultar primero la instalación.

Las instalaciones se pueden crear mediante el createOrUpdateInstallation método como el siguiente:

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

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

// Create an installation for APNs
let installation = createAppleInstallation({
  installationId: uuid(), // Must be unique
  pushChannel: "00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0", // PNS specific handle
  tags: ["likes_hockey", "likes_football"],
});

installation = await client.createOrUpdateInstallation(installation);

Con el enfoque modular, el código sería el siguiente:

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

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

// Create an installation for APNs
let installation = createAppleInstallation({
  installationId: uuid(), // Must be unique
  pushChannel: "00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0", // PNS specific handle
  tags: ["likes_hockey", "likes_football"],
});

installation = await createOrUpdateInstallation(context, installation);

Se puede realizar una actualización de una instalación mediante el esquema de revisión json, como agregar una etiqueta y un identificador de usuario mediante el updateInstallation método .

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

Con el enfoque modular, el código sería el siguiente:

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

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

Para recuperar una instalación existente, use el método con el getInstallation identificador de instalación único existente.

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

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

const installationId = "<unique installation ID>";

const installation = client.getInstallation(installationId);

Con el enfoque modular, el código sería el siguiente:

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 de registros

Un registro está asociado a un PNS igual que la instalación anterior, con el identificador de dispositivo único del PNS y las etiquetas asociadas. Los registros de plantillas son una manera de crear plantillas de cuerpo predefinidas que, a continuación, se pueden personalizar en tiempo de envío con propiedades para rellenar el mensaje. Para obtener más información sobre las plantillas, consulte la documentación sobre plantillas.

Una instalación se puede crear de dos maneras, primero obteniendo un identificador de registro del servidor mediante getInstallationId y, a continuación createOrUpdateRegistration , o a través del createRegistration método .

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

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

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

registration = await client.createRegistration(registration);

console.log(`New Registration ID: ${registration.registrationId}`);

Con el enfoque modular, el código sería el siguiente:

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

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

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

registration = await createRegistration(context, registration);

console.log(`New Registration ID: ${registration.registrationId}`);

Novedades se puede realizar a través del updateRegistration método , pero a diferencia de las instalaciones, no admite actualizaciones incrementales. La consulta de un registro existente se puede realizar con el getRegistration método .

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

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

const registrationId = "<unique Registration ID>";

let registration = await client.getRegistration(registrationId);

registration.tags.push("likes_sports");

registration = await client.updateRegistration(registration);

Con el enfoque modular, el código sería el siguiente:

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

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

const registrationId = "<unique Registration ID>";

let registration = await getRegistration(context, registrationId);

registration.tags.push("likes_sports");

registration = await updateRegistration(context, registration);

Los registros, a diferencia de las instalaciones, se pueden consultar para obtener todos los registros, los registros coincidentes con una condición o por etiquetas. Los registros se pueden consultar mediante el listRegistrationsmétodo , listRegistrationsByChannel y listRegistrationsByTag . Todos los métodos admiten la limitación a través de la top opción y admiten la paginación asincrónica.

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

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

const registrations = await 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));
  }
}

Con el enfoque modular, el código sería el siguiente:

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

Operaciones de envío

Notification Hubs admite el envío de notificaciones a dispositivos directamente mediante el identificador único proporcionado por PNS, mediante etiquetas para el envío de audiencia o una difusión general a todos los dispositivos. Con la SKU estándar y versiones posteriores, el envío programado permite al usuario programar notificaciones hasta siete días de antelación. Todas las operaciones de envío devuelven un identificador de seguimiento y un identificador de correlación que se pueden usar para casos de soporte técnico de Notification Hubs. Con la SKU estándar y versiones posteriores, también se devuelve un identificador de notificación que se puede usar para obtener telemetría de notificación a través del getNotificationOutcomeDetails método .

Con fines de depuración, las enableTestSend opciones se pueden establecer en true las que se obtienen comentarios inmediatos del PNS en el sendNotification método, pero no se admite en escenarios de producción. Esto no se admite en los métodos de envío programados.

Las cadenas JSON o XML sin formato se pueden enviar a los métodos de envío o programados, o se pueden usar los generadores de notificaciones que ayudan a construir mensajes por PNS, como APNs, Firebase, Baidu, ADM y WNS. Estos generadores compilarán el formato de mensaje nativo, por lo que no hay ninguna estimación sobre qué campos están disponibles para cada PNS.

// Using the class-based approach
import { createAppleNotificationBody } from "@azure/notification-hubs";

// Using the modular approach
import { createAppleNotification, createAppleNotificationBody } from "@azure/notification-hubs/models";

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

const result = await sendNotification(context, notification);

Envío de difusión

Notification Hubs se puede usar para enviar notificaciones a todos los dispositivos registrados por plataforma mediante el envío de difusión a través del sendNotification método .

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

const context = createClientContext(connectionString, hubName);

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

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

const result = await client.sendNotification(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}`);
}

Con el enfoque modular, el código sería el siguiente:

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

const context = createClientContext(connectionString, hubName);

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

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

const result = await sendNotification(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}`);
}

Envío directo

Para enviar directamente un dispositivo, el usuario puede enviar mediante el identificador único proporcionado por la plataforma, como el token de dispositivo de APNs, llamando al sendNotification método con un deviceHandle parámetro .

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

const client = new NotificationHubsClient(connectionString, hubName);

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

Con el enfoque modular, el código sería el siguiente:

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

const context = createClientContext(connectionString, hubName);

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

Envío de audiencia

Además de tener como destino un único dispositivo, un usuario puede tener como destino varios dispositivos mediante etiquetas. Estas etiquetas se pueden proporcionar como una lista de etiquetas, que después crea una expresión de etiqueta para que coincida con los dispositivos registrados, o a través de una expresión de etiqueta que luego puede usar lógica booleana para dirigirse al público correcto. Para obtener más información sobre las etiquetas y las expresiones de etiquetas, vea Enrutamiento y expresiones de etiqueta.

Si desea crear una expresión de etiqueta a partir de una matriz de etiquetas, hay un Generador de expresiones de etiquetas disponible con el createTagExpression método que se expone en la importación de nivel superior o @azure/notification-hubs/models/tagExpressionBuilder la importación modular que crea una "o expresión de etiqueta" a partir de las etiquetas.

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

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

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

console.log(tagExpression);
// likes_football||likes_hockey

Los mensajes de expresión de etiqueta se pueden enviar mediante el código siguiente:

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

Con el enfoque modular, el código sería el siguiente:

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

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

Envío programado

Las notificaciones push se pueden programar hasta siete días de antelación con espacios de nombres de SKU estándar y versiones posteriores mediante el scheduleBroadcastNotification método para enviar a dispositivos con etiquetas o una difusión general. Esto devuelve un identificador de notificación que se puede usar para cancelar si es necesario a través del cancelScheduledNotification método .

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

Con el enfoque modular, el código sería el siguiente:

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

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

Solución de problemas

compatibilidad con React Native

React Native actualmente no tiene compatibilidad con [URLSearchParams] que usa el SDK de Azure Notification Hubs. Para usar el SDK en React Native, deberá instalar el url-search-params-polyfill paquete e importarlo antes de usar el SDK.

import 'url-search-params-polyfill';

También es necesario proporcionar polyfill para TextEncoder la API y la API de iterador asincrónico. Consulte nuestro ejemplo de React Native con Expo para obtener más detalles.

Diagnóstico de notificaciones eliminadas

Azure Notification Hubs tiene una guía completa para solucionar problemas con las notificaciones eliminadas en la Guía de Diagnóstico de notificaciones eliminadas en Azure Notification Hubs.

El envío de prueba se admite en el sendNotification método con la enableTestSend opción :

// Using the client
const result = await client.sendNotification(notification, { tags, enableTestSend: true });

// Using the modular approach
const result = await sendNotification(context, notification, { tags, enableTestSend: true });

Registro

La habilitación del registro puede ayudar a descubrir información útil sobre los errores. Para ver un registro de solicitudes y respuestas HTTP, establezca la variable de entorno AZURE_LOG_LEVEL en info. Como alternativa, el registro se puede habilitar en tiempo de ejecución llamando a setLogLevel en @azure/logger:

const { setLogLevel } = require("@azure/logger");

setLogLevel("info");

Para obtener instrucciones más detalladas sobre cómo habilitar los registros, consulte los documentos del paquete @azure/logger.

Pasos siguientes

En los ejemplos siguientes se muestran las distintas formas en que puede interactuar con Azure Notification Hubs:

Administración de dispositivos:

Operaciones de envío:

Operaciones de administración:

Contribuciones

Si desea contribuir a esta biblioteca, lea la guía de contribución para obtener más información sobre cómo compilar y probar el código.

Las pruebas de este módulo son una combinación de pruebas dinámicas y unitarias, que requieren que tenga una instancia de Azure Notification Hubs. Para ejecutar las pruebas, deberá ejecutar:

  1. rush update
  2. rush build -t @azure/notification-hubs
  3. Create un archivo .env con este contenido en la sdk\notificationhubs\notification-hubs carpeta :NOTIFICATIONHUBS_CONNECTION_STRING=connection string for your Notification Hubs instanceNOTIFICATION_HUB_NAME=Notification Hub name
  4. cd sdk\notificationhubs\notification-hubs
  5. rushx test.

Consulte nuestra carpeta de pruebas para obtener más detalles.

Impresiones