Agoraユーザー制限を行う(UIDの取得)

Agora

意図

チャネルで会話しているユーザー(UID)を取得し、Agoraの通話を制限したい。

  • アプリのユーザーでAgoraUIDが一意(ユニーク)であること

ユースケース

  • 1.アプリにAgoraUIDが登録されている場合→アプリのDBのAgoraUIDを使う
  • 2.アプリにAgoraUIDが登録されていない場合→AgoraにAgoraUIDを決めてもらう

How can I use string user names?を確認すると、下記のようにある。

同じチャネル内でパラメータタイプを混在させないでください。文字列ユーザー名をサポートしないSDKを使用する場合、チャネルで使用できるのは整数のユーザーIDのみです。次のAgoraSDKは、文字列ユーザーアカウントをサポートしています。

チャネル内のUIDに「数値」と「文字列」は混在している場合、数値が優先され、自動的に生成されるので、注意が必要。(数値と文字列が共存している場合、文字列のUIDに数値型も付与される。)基本的にUIDは、数値で固定する。


そのため、下記の処理が必要になる。

  • アプリへのUID保存を数値型にする
  • Token生成の際に渡すUIDを数値型にする

ユーザー毎の時間の取得

※Agora Web SDKのバージョンによって、結構仕様が変わるのでご注意ください。

  • Agora Analytics APIを使う。※Beta

UIDの取得

  • フロントエンド: チャネルに参加(join())した後に、AgoraRTClinetを確認すると、プロパティusersにUIDが含まれている。
  • フロントエンド: user-joineduserに入ってきている。
this.rtc.client.on('user-joined', user => {
})

this.rtc.client.on('user-left', (user, reason) => {
})
  • バックエンド: RESTful APIBaseUrl/dev/v1/channel/user/{appid}/{channelName}を呼び出す。→そのチャネルで会話しているユーザーを取得できる。

※チャネルに参加者がいない場合、{ channel_exist: false }が返ってくるので注意。
※ここで、チャネルに「文字列」と「数値」のUIDが共存していると期待しているレスポンスが返ってこないので注意!

Push通知の利用

通話をする上で必要そうな通知

  • ユーザー参加の通知(Agoraのuser-joinedで分かる)
  • ユーザー不参加の通知(Agoraのuser-leftで分かる)
  • 招待の通知(Pusherを利用する)

※AgoraにもPush通知の機能はあるが、音声通話以外にも必要そうなので、入れておく。

資料