概要
ビデオ通話中に(時間制限後などに)退室させるサンプルについてご紹介します。
パターンとしては4つになります。
1. クライアント自身のタイマーで追い出す方法
2. Real-time messaging SDKのテキスト送受信で追い出す方法
3. Tokenの有効期限で追い出す方法
4. RESTFul APIで追い出す方法
サンプルリンクはこちらをご利用ください。
(agoraLeaveSample_v4)
1.クライアント自身のタイマーで追い出す方法
クライアント自身のタイマーで追い出す方法になります。
サンプル
サンプルの「CASE1_Timer」を利用します。
実装
JavaScriptのタイマー処理を利用して、
タイムアウト時に退室するよう実装します。
//タイムアウト
function timeOut(){
console.log("timeOut");
leave();
};
//タイマー設定
function startTimer(sec){
console.log("startTimer:" + sec);
tm = setTimeout(timeOut, sec);
}
//タイマー削除
function clearTimer(){
console.log("clearTimer");
clearTimeout(tm);
}
動作確認
- サンプルを起動し、入室します。
- StartTimer(60)ボタンをクリックし、タイマーを開始(60秒)します。
- (60秒後)タイムアウトします。
- 退室処理が行われます。
2.Real-time messaging SDKのテキスト送受信で追い出す方法
Real-time messaging SDKを利用して他拠点にメッセージ(退室依頼を示す)を送り、
それを受け取った拠点を追い出します。
サンプル
サンプルの「CASE2_RTM」を利用します。
実装
メッセージ送信/受信の実装部分になります。
//実行ボタンクリック
function leaveOfremote () {
sendChannelMessage(prepMessage("leave",options.remoteuid));
}
//送信メッセージ編集
function prepMessage(msg,id){
console.log(id + ":" + msg);
return id + ":" + msg;
}
//メッセージ送信部分
function sendChannelMessage(localMessage){
rtc.channelRtm.sendMessage({text:localMessage}).then(function(){
console.log("AgoraRTM client succeed in sending channel message: " + localMessage);
}).catch(function(err){
console.log("AgoraRTM client failed to sending role" + err);
});
}
//メッセージ受信部分
function receiveChannelMessage(){
rtc.channelRtm.on("ChannelMessage", function (sentMessage, senderId) {
console.log("AgoraRTM client got message: " + JSON.stringify(sentMessage) + " from " + senderId);
console.log(sentMessage.text == options.uid + ":leave");
if (sentMessage.text == options.uid + ":leave"){
leave();
logoutRtm();
}
});
}
動作確認
- 1拠点目が入室します。
- 2拠点目が入室します。
- 1拠点目からLEAVE(*下記イメージ参照)ボタンをクリックします。
- 2拠点目が1拠点目からのメッセージを受信後、退室します。
<サンプル画面/コンソール(F12)>
・1拠点目(LEAVEボタンクリック時)
3.Tokenの有効期限で追い出す方法
Tokenの有効期限が切れた際に追いだす方法です。
※agora.ioのTokenについて詳しく知りたい方はagora.io の Security Key についてをご参照ください。
サンプル
サンプルの「CASE3_Token」を利用します。
Token取得方法
1.Tokenを取得するagoraToken取得用サンプルコード(PHP)をダウンロードします。
2./sample配下にあるRtcTokenBuilderSample.phpに値を設定します。
$appID = "*Consoleより取得&設定*";
$appCertificate = "*Consoleより取得&設定*";
$channelName = "demo";
$uid = 12345;
$uidStr = "12345";
$expireTimeInSeconds = 60;
3.http実行環境でphpを実行します。
レスポンスとしてTokenが画面に出力されます。(それを利用します)
実装
function handleTokenPrivilegeDidExpire() {
leave();
console.log("onTokenPrivilegeDidExpire")
}
動作確認
- Tokenを取得します。
- TokenでChannelに入室します。(uid:12345)
- Token有効期限が切れ、退室します(追い出されます)。
4.RESTFul APIで追い出す方法
RESTFul API(kicking-rule)をコールして追い出す方法になります。
※agoraのRESTFul APIをご存知ない方はagora.io Dashboard RESTful APIの利用例をご参照ください。
サンプル
サンプルの「CASE4_RESTfulAPI」を利用します。
RESTful API
RESTFul APIのBan Users at the Server(ユーザーの入室制限)を利用します。
このAPIをコールすると、指定したChannelへの入室が一定時間禁止されます。
Channel(必須)とユーザID、IPアドレスの粒度で指定できます。
(*各Recording SDKの録画用ユーザ(uid)を追い出しもできます)
実装
function handleConnectionStateChange(curState,revState,reason) {
console.log(curState + ":" + reason);
//ユーザ入室制限
if (reason == "UID_BANNED"){
leave();
}
}
<?php
require 'params.php';
$url = $baseUrl.'/v1/kicking-rule/';
$params = [
'appid' => '***', //APPID
'cname' => 'demo', //Channel名
'uid' => '', //ユーザID
'ip' => '', //IPアドレス
'time' => 3,
'privileges' => ['join_channel']
];
$json_enc = json_encode($params);
$header = array();
$header[] = 'Content-type: application/json;charset=utf-8';
$header[] = 'Authorization: Basic '.base64_encode($plainCredentials);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_enc);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
var_dump($response);
curl_close($curl);
動作確認
- Channelに入室します。
- banrule.phpをコールします。
- Channelから退室します(追い出されます)。
- 再度Channelに入室しようとしても、入室制限中は、入室できません。
<サンプル画面/コンソール(F12)>
・banrule.phpコール時(追いだし)