次の方法で共有


Azure Notification Hubs SDK for JavaScript

Azure Notification Hubs には、任意のバックエンド (クラウドまたはオンプレミス) から任意のプラットフォーム (Apple、Amazon Kindle、Firebase、Baidu、Xiaomi、Web、Windows など) に通知を送信できるスケールアウト プッシュ エンジンが用意されています。 Notification Hubs は、エンタープライズ シナリオとコンシューマー シナリオの両方に適しています。 いくつかのシナリオの例を次に示します。

  • ニュース速報の通知を数百万台のデバイスに速やかに送信する。
  • 場所に基づいたクーポンを対象のユーザー セグメントに送信する。
  • イベント関連の通知を、メディア/スポーツ/金融/ゲーム アプリケーションのユーザーまたはグループに送信する。
  • 注意を引いて顧客に販売するために、プロモーション コンテンツをアプリケーションにプッシュする。
  • 新着メッセージや作業項目などのエンタープライズ イベントをユーザーに通知する。
  • 多要素認証のコードを送信する。

主要リンク:

: パッケージを使用 azure-sb している場合は、 migration guide to move from azure-sb to @azure/notification-hubs

はじめに

現在サポートされている環境

詳細については、Microsoft のサポート ポリシーを参照してください。

パッケージをインストールする

npm install @azure/notification-hubs

前提条件

Azure Notification Hubs リソースをCreateする

Azure Notification Hub は、次の方法で作成できます。

  1. Azure Portal
  2. Azure CLI
  3. Bicep
  4. ARM テンプレート

作成した通知ハブは、 Azure Portal または Azure CLI を使用して構成できます。

クライアントのインポート

この JavaScript 用 SDK には、クラスベースのアプローチまたはモジュール式の設計アプローチを使用して、Azure Notification Hubs と対話する 2 つの方法が用意されています。 クラスベースのアプローチは、クライアントを作成してからクライアント上のメソッドと対話するために、すべてのパッケージで一貫しています。

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- や などのgetInstallationクライアント メソッドを介したcreateClientContextクライアントのメインエントリ ポイントsendNotification
  • @azure/notification-hubs/models - Notification Hubs モデルとファクトリ メソッド。

上記のコード スニペットは、次のようになります。

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

クライアントを認証する

Azure Notification Hub との対話は、Shared Access Signature 接続文字列をサポートする から始まりますNotificationHubsClient。 これには、 リッスン管理送信のアクセス許可レベルが含まれます。

Listen を使用すると、クライアントは Registration and Installations API を使用して自身を登録できます。 Send を使用すると、クライアントは送信 API を使用してデバイスに通知を送信できます。 最後に、Manage を使用すると、ユーザーはクエリなどの登録とインストールの管理を実行できます。

新しいNotificationHubsClientクライアントは、接続文字列と通知ハブ名を持つコンストラクターを使用して作成できます。

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が初期化されたら、次の概念を調べることができます。

  • インストールと RegistrationDescriptions を使用したデバイス管理
  • デバイスに通知を送信する

デバイスの管理

デバイス管理は、APN や Firebase などのネイティブ プラットフォーム通知サービス (PNS) からの一意の識別子と、対象ユーザーにプッシュ通知を送信するために使用されるタグなどの関連メタデータを格納できるようにするための Notification Hubs の主要な概念です。 これは、新しく推奨されるメカニズムであるインストール API と登録という 2 つの API で行われます。

Installations API

インストールは、対象ユーザーへの送信に使用できるインストール ID やユーザー ID などの追加のプロパティを含む、デバイス管理に対する新しいネイティブ JSON アプローチです。 インストール API には、次の方法で既存の登録 API よりもいくつかの利点があります。

  • 完全にべき等 API なので、インストールで create を呼び出すので、重複を心配することなく操作を再試行できます。
  • userIdinstallationIdおよび などの$InstallationId:{myInstallId}$UserId:{bob@contoso.com}タグ式で使用できる および プロパティのサポート。
  • テンプレートは、別の登録ではなくインストールの一部になり、送信用のタグとして名前で参照できます。
  • 部分的な更新は JSON Patch Standard を通じてサポートされています。これにより、最初にインストールに対してクエリを実行することなく、タグを追加したり、他のデータを変更したりできます。

インストールは、次のようなメソッドを createOrUpdateInstallation 使用して作成できます。

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

モジュール型のアプローチを使用すると、コードは次のようになります。

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

インストールに対する更新は、 メソッドを使用してタグとユーザー ID を追加するなど、JSON Patch スキーマを 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/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);

既存のインストールを取得するには、 メソッドを getInstallation 使用して、既存の一意のインストール ID を指定します。

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

Registrations API

登録は、上記のインストールと同様に PNS に関連付けられます。PNS からの一意のデバイス識別子と、関連付けられたタグを使用します。 テンプレートの登録は、定義済みの本文テンプレートを作成する方法であり、送信時にメッセージに入力するプロパティを使用してカスタマイズできます。 テンプレートの詳細については、 テンプレートのドキュメントを参照してください

インストールは、2 つの方法のいずれかで作成できます。まず、 を使用してサーバーから登録 ID を取得してからcreateOrUpdateRegistration、 メソッドを使用してまたは をcreateRegistration使用getInstallationIdします。

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

モジュール型のアプローチを使用すると、コードは次のようになります。

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

Updatesは メソッドをupdateRegistration使用して実行できますが、インストールとは異なり、増分更新はサポートされません。 既存の登録のクエリは、 メソッドを getRegistration 使用して実行できます。

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

モジュール型のアプローチを使用すると、コードは次のようになります。

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

登録は、インストールとは異なり、クエリを実行して、すべての登録を取得したり、条件に登録を照合したり、タグで照合したりすることができます。 登録は、 メソッドと listRegistrationsByTag メソッドを使用してクエリをlistRegistrationslistRegistrationsByChannel実行できます。 すべてのメソッドは、 オプションを使用した制限を top サポートし、非同期ページングをサポートします。

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

モジュール型のアプローチを使用すると、コードは次のようになります。

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

送信操作

Notification Hubs では、一意の PNS で提供される識別子を直接使用するか、対象ユーザー送信用のタグを使用するか、すべてのデバイスに対して一般的なブロードキャストを使用して、デバイスに通知を送信できます。 Standard SKU 以上を使用して、 スケジュールされた送信 を使用すると、ユーザーは最大 7 日前に通知をスケジュールできます。 すべての送信操作は、Notification Hubs サポート ケースに使用できる追跡 ID と関連付け ID を返します。 Standard SKU 以降では、通知 ID も返されます。これは、 メソッドを介して getNotificationOutcomeDetails 通知テレメトリを取得するために使用できます。

デバッグの目的で、メソッドの enableTestSend PNS sendNotification からすぐにフィードバックを受け取るオプションを に設定trueできますが、運用環境のシナリオではサポートされていません。 これは、スケジュールされた送信メソッドではサポートされていません。

生の JSON または XML 文字列は、送信またはスケジュールされた送信メソッドに送信することも、通知ビルダーを使用して、APN、Firebase、Baidu、ADM、WNS などの PNS ごとにメッセージを構築するのに役立ちます。 これらのビルダーはネイティブ メッセージ形式を構築するため、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);

ブロードキャスト送信

Notification Hubs を使用すると、 メソッドを介してブロードキャスト送信を使用して、プラットフォームごとに登録されているすべてのデバイスに通知を sendNotification 送信できます。

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

モジュール型のアプローチを使用すると、コードは次のようになります。

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

直接送信

デバイスを直接送信するには、 パラメーターを使用して メソッドを呼び出すことによって、APNs デバイス トークンなどのプラットフォームで提供される一意識別子をsendNotificationdeviceHandle使用して送信できます。

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

モジュール型のアプローチを使用すると、コードは次のようになります。

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

対象ユーザーの送信

1 つのデバイスをターゲットにするだけでなく、ユーザーはタグを使用して複数のデバイスをターゲットにすることができます。 これらのタグは、タグの一覧として指定できます。これにより、登録済みデバイスに一致するタグ式が作成されます。また、タグ式を使用して、ブール値ロジックを使用して適切な対象ユーザーをターゲットにすることができます。 タグとタグ式の詳細については、「 ルーティングとタグ式」を参照してください。

タグの配列からタグ式を作成する場合は、 メソッドを createTagExpression 使用してタグ式ビルダーを使用できます。これは、最上位レベルのインポートまたは @azure/notification-hubs/models/tagExpressionBuilder モジュールインポートで公開され、タグから "またはタグ式" を作成します。

// 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

タグ式メッセージは、次のコードを使用して送信できます。

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

スケジュールされた送信

プッシュ通知は、タグまたは一般的なブロードキャストを使用してデバイスに送信するメソッドを scheduleBroadcastNotification 使用して、Standard SKU 名前空間以降で最大 7 日前にスケジュールできます。 これにより通知 ID が返されます。この ID は、 メソッドを介して必要に応じて 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/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}`);

トラブルシューティング

React Native サポート

React Native現在、Azure Notification Hubs SDK で使用される [URLSearchParams] はサポートされていません。 React Nativeで SDK を使用するには、SDK を使用する前にパッケージをurl-search-params-polyfillインストールしてインポートする必要があります。

import 'url-search-params-polyfill';

また、API と非同期反復子 API の TextEncoder ポリフィルも提供する必要があります。 詳細については、expo のReact Nativeサンプルを参照してください。

破棄された通知を診断する

Azure Notification Hubs には、「Azure Notification Hubs ガイドで削除された通知を診断する」の 削除された通知に関する問題のトラブルシューティングに関する完全なガイドがあります

テスト送信 は、 オプションを使用して sendNotification メソッド enableTestSend でサポートされています。

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

ログの記録

ログの記録を有効にすると、エラーに関する有用な情報を明らかにするのに役立つ場合があります。 HTTP 要求と応答のログを表示するには、環境変数 AZURE_LOG_LEVELinfo に設定します。 または、@azure/loggersetLogLevel を呼び出して、実行時にログ記録を有効にすることもできます。

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

setLogLevel("info");

ログを有効にする方法の詳細については、@azure/logger パッケージに関するドキュメントを参照してください。

次の手順

次のサンプルは、Azure Notification Hubs と対話するさまざまな方法を示しています。

デバイス管理:

送信操作:

管理操作:

共同作成

このライブラリに投稿する場合、コードをビルドしてテストする方法の詳細については、投稿ガイドを参照してください。

このモジュールのテストは、ライブ テストと単体テストの組み合わせであり、Azure Notification Hubs インスタンスを用意する必要があります。 テストを実行するには、次を実行する必要があります。

  1. rush update
  2. rush build -t @azure/notification-hubs
  3. フォルダーに次の内容を含む .env ファイルをsdk\notificationhubs\notification-hubsCreateします。NOTIFICATIONHUBS_CONNECTION_STRING=connection string for your Notification Hubs instanceNOTIFICATION_HUB_NAME=Notification Hub name
  4. cd sdk\notificationhubs\notification-hubs
  5. rushx test.

詳細については、 テスト フォルダーを参照してください。

インプレッション数