5.2. SSE Push 受信実装 (.NET編)

5.2.1. ライブラリの組み込み

事前に NEC BaaS .NET SDK のセットアップを行っておいて下さい。 ついで、プロジェクトに SSE Push ライブラリの組み込みを行います。

SSE Push ライブラリは GitHub の baas-ssepush-dotnet で配布しています。

SSE Push ライブラリには以下の DLL ファイルが含まれます。

  • ServerSentEvents.dll : SSE ライブラリ
  • SsePushClient.dll : SSE Push 受信ライブラリ (BaaS非依存部)
  • Nec.Nebula.Push.dll : SSE Push 受信ライブラリ (BaaS依存部)

各 DLL に対して、以下の手順を実施してください。

  1. プロジェクト内に DLL ファイルをコピー。
  2. プロジェクトを選択し、「プロジェクト」⇒「参照の追加」を選択。
  3. 「参照」ボタンをクリック。
  4. dll ファイルを選択して OK をクリック。

5.2.2. 依存ライブラリの追加

NuGet を使用して、以下の依存ライブラリを追加します。

  • Rx-Core
  • Rx-Linq

NuGet のオペレーションについては、Nebula .NET SDK ガイドの「SDKセットアップ手順」を参照してください。

5.2.3. 実装の概要

下記の2ステップにより、Pushメッセージを受信できるようになります。

  1. インスタレーションを登録する
  2. Pushの待受を開始する

5.2.4. インスタレーションを登録する

インスタレーションオブジェクトの Save メソッドを呼ぶことで、インスタレーションを NEC BaaS サーバに登録できます。この登録により、サーバはあなたのアプリケーションをPushの宛先として認識します。登録以降は、Pushの待受を開始できるようになります。

この処理は、アプリケーションの起動時(Nebula初期化後)に実施してください。

なお、すでに登録済みであっても、 Save メソッドを重ねて呼び出して問題ありません。

public async void registerInstallation() {
    // インスタレーションの更新ロックを取得
    NbSsePushReceiveClient.AcquireLock();

    try {
        // インスタレーションを取得する
        var installation = NbSsePushInstallation.GetCurrentInstallation();

        // 必須プロパティを設定する (設定例は後述)
        installation.Channels = ...;
        installation.AllowedSenders = ...;

        // インスタレーションをサーバに登録する
        await installation.Save();
    } finally {
        // インスタレーションの更新ロックを解除
        NbSsePushReceiveClient.ReleaseLock();
    }
}

インスタレーションの登録を行う際は、必ず NbSsePushReceiveClient の AcquireLock() を呼び出して、 インスタレーションの更新ロックを取得する必要があります。ロック解除は releaseLock() で行って下さい。

5.2.5. Pushの待受を開始する

インスタレーションの登録に成功すると、Pushの待受を開始できるようになります。

Pushの待受を開始するには、NbSsePushReceiveClient オブジェクトの Connect メソッドを呼びます。

メッセージを受信するためには NbSsePushReceiveClient にコールバックを設定します。 以下に例を示します。

// Push受信クライアント
private var _pushClient = new NbSsePushReceiveClient();

public void startPushReceive() {
    // メッセージ受信コールバック
    _pushClient.RegisterOnMessage("message", msg => {
        // msg.Data に受信メッセージ(文字列)が引き渡される
    });

    // エラーコールバック
    _pushClient.RegisterOnError((statusCode, errorInfo) => {
        // エラー処理を行う。
        if (statusCode == 401) {
            // 401 エラーが発生した場合は、一定時間待ってから
            // インスタレーションの登録からやりなおす。
            retryRegisterInstallation();
        } else {
            // その他のエラー
        }
    });

    // 接続を開始する
    _pushClient.Connect();
}

5.2.6. 備考: 必須プロパティの設定例

インスタレーションの必須プロパティの設定例を示します。

  • NewsChannelAlarmChannel へのPushを購読します。
  • 任意の送信者からのPushを受け付けます
installation.Channels = new HashSet<string>{"NewsChannel", "AlarmChannel"};
installation.AllowedSenders = new HashSet<string>{"g:anonymous"};

5.2.7. 備考: ユーザの紐付け

インスタレーションは、インスタレーション保存のタイミングでログイン中だったユーザに紐付けられます。

紐付けを変更したい場合は、ログイン操作・ログアウト操作の完了時に、 あらためてインスタレーションの保存処理を行う必要があります。