次の方法で共有


Android、iOS、Windows アプリケーションで Azure Event Grid を使用してプッシュ通知を統合する

Azure Communication Services では、Azure Event Grid と統合することで、信頼性、拡張性、安全性の高い方法でリアルタイムのイベント通知を受け取ることができます。 この統合を使用して、モバイル デバイス上のユーザーにプッシュ通知を送信する通知システムを構築できます。 これを実現するには、 Azure Functions または Webhook をトリガーする Event Grid サブスクリプションを作成します。

Communication Services が Event Grid とどのように統合されるかを示す図。

このチュートリアルでは、ネイティブ プラットフォームでプッシュ通知を受け取るために、Azure Event Grid を使用して Azure Communication Services Calling を実装する方法について説明します。 Azure Event Grid は、イベントドリブン アプリケーションを簡単に構築できるサーバーレス イベント ルーティング サービスです。 このチュートリアルでは、着信のプッシュ通知を受け取る方法を設定し、理解するのに役立ちます。

Event Grid を使用して、音声通話イベントとビデオ通話イベントを確認できます。

プッシュ通知モデルに関する現在の制限事項

Native Calling SDK とプッシュ通知の使用には現在、次の制限事項があります。

  • TTL の最大値は 180 日 (15,552,000 秒) で、最小値は 5 分 (300 秒) です。 CTE (カスタム Teams エンドポイント) の場合、最大 TTL 値は 24 時間 (86,400 秒) です。
  • Baidu など、Azure Notification Hub でサポートされていても Calling SDK ではまだサポートされていない通知の種類を使用してプッシュ通知を配信することはできません。

前提条件

Azure Communication Services を介して着信を受信したときに、モバイル デバイス (iOS および Android) でユーザーに通知するシナリオを考えてみましょう。 Azure Event Grid を使用して実現します。

実装の手順

Event Grid へのイベントの登録のセットアップ

デバイス情報を処理するための Azure Functions

デバイス登録データを処理するには、Azure Functions を使用する必要があります。 登録タスクごとに 3 つの個別の Webhook エンドポイントを作成します。

  • デバイス エンドポイント情報を格納します。
  • デバイス エンドポイント情報を削除します。
  • 特定の CommunicationIdentifier に関するデバイス エンドポイント情報を取得します。

デバイス情報を格納するためにデータベースを使用する必要があります。 この例では、わかりやすくするために MongoDB を使用しています。 ただし、使い慣れたデータベースを自由に使用できます。

このクラスのコードを使用できます。

通知を配信する Azure Functions

      // Read all the required settings.
      var anhHubConnectionString = Environment.GetEnvironmentVariable("ANH_Hub_Connection_String");
      var anhHubName = Environment.GetEnvironmentVariable("ANH_Hub_Name");
      var anhHubUrl = Environment.GetEnvironmentVariable("ANH_Hub_URL");
      var anhHubApiVersion = Environment.GetEnvironmentVariable("ANH_Hub_Api_Version") ?? Defaults.ANH_DEFAULT_REST_API_VERSION;


      // Generate the SAS token for making the REST API to Azure Notification Hub
      var authorization = GenerateToken(anhHubConnectionString, anhHubName);

      // Create the payload to sent to ANH.
      PushNotificationInfo? pushNotificationInfo = Helpers.ConvertToPNInfo(input, logger) ?? throw new Exception("Could not extract PN info");
      var body = new RootPayloadBody(pushNotificationInfo);

      // Send the payload to all the devices registered.
      // You can get the device info data from the database

      using var client = new HttpClient();
      client.DefaultRequestHeaders.Add("Accept", "application/json");
      client.DefaultRequestHeaders.Add("Authorization", authorization);
      client.DefaultRequestHeaders.Add("ServiceBusNotification-Format", deviceInfo.platform);
      client.DefaultRequestHeaders.Add("ServiceBusNotification-Type", deviceInfo.platform);
      client.DefaultRequestHeaders.Add("ServiceBusNotification-DeviceHandle", deviceInfo.deviceToken);
      if (deviceInfo.platform.Equals(Platform.apple.ToString()))
      {
          client.DefaultRequestHeaders.Add("ServiceBusNotification-Apns-Push-Type", "voip");
      }

      var payload = JsonConvert.SerializeObject(The Event Grid payload model);
  
      using var httpContent = new StringContent(payload, Encoding.UTF8, "application/json");
      var httpResponse = await client.PostAsync(new Uri(anhHubUrl), httpContent).ConfigureAwait(false);
                

このクラスのコードを使用できます。

Event Grid トリガーを処理する Azure Functions

Azure Functions をデプロイした後、Event Grid と Azure Communication Services リソースを構成して IncomingCall イベントをリッスンします。 次の手順に従って、リソースを簡単に構成できます。

プッシュ通知に登録する

Calling のネイティブ アプリで、アプリケーションの起動時にデバイス トークンを使用して API CallAgent.registerPushNotifications (iOS SDK) を呼び出す代わりに、デバイス トークンを Azure Functions アプリに送信し、POST 要求を AddDeviceToken 関数に送信します (エンドポイント 1 を登録します)。

実装をテストする

Azure Communication Services アプリケーションを呼び出して実装をテストします。 着信を受信したときに、iOS デバイスと Android デバイスでプッシュ通知が受信されていることを確認します。

ワークフローの概要

  1. Azure Communication Services ユーザーへの着信を受信した場合、Azure Communication の呼び出し元リソースは EventGridTrigger、および着信呼び出しのペイロードを含む Azure Functions をトリガーします。
  2. Azure Functions は、データベースからデバイス トークン情報を取得します。
  3. ペイロードを VOIP プッシュ通知ペイロードに変換するには、PushNotificationInfo.fromDictionary (iOS SDK) が必要です。
  4. Azure Functions は、Azure Notification Hub の REST API を使用して、プッシュ ペイロードを送信します。
  5. プッシュがデバイスへと配信され、正常であれば CallAgent.handlePush API が呼び出されます。

このチュートリアルでは、プッシュ通知の Azure Event Grid を使用して、Azure Communication Services Calling を実装する方法について説明しました。 Calling と Event Grid を統合し、ネイティブ プラットフォーム アプリでイベントを処理することで、着信をユーザーにリアルタイムで通知できます。 Azure Event Grid は、ユーザー エクスペリエンスを向上させ、アプリケーション内のコミュニケーションを向上させることができます。

サンプル

次に示すサンプルは、任意のネイティブ プラットフォーム (iOS、Android、Windows) で動作します。 コードサンプルはこちらにあります。

次のステップ