🎟️

Agoraのトークン発行する(RTM/RTC)

2022/06/06に公開

はじめに

Agoraはチャットやビデオ通話を開発するための通信機能を提供するサービスです。
各プラットフォーム向けのライブラリとマニュアルが用意されています。

Agoraのアカウントを作成後、端末間の通信を始めるために トークン を払い出します。
Nodeサーバでのトークン生成を調べました。

今回作りたいトークンは、以下です。

  • Real-time Messaging(以下:RTM) Token
  • Interactive Live Streaming(以下:RTC) Token

基本情報

トークンの種類

チャットやビデオ通話など複数の機能がありますが、サービスにあったトークンを発行する必要があります。

ここでは、

  • チャットに必要な Real-time Messaging(以下:RTM) Token
  • ビデオ通話に必要な Interactive Live Streaming(以下:RTC) Token

を作成します。

サイトが独特? Google検索から直接飛ぶ人は注意

ちょっと話がずれるのですが、私が混乱したので記載しておきます。
サイトのTOPから進めば問題ないですが、ググると別の機能についてのドキュメントが開くときがあります。

ドキュメントの切り替えは、ヘッダーから

↓↓ 展開すると

閑話休題

必要情報の確認や払い出しは console


↓↓ 別ページで開きます

トークンを作る

トークン払い出しに必要なIDを管理画面から取得

トークンを作るには、 App IDCertificate が必要です。

ドキュメントにあるように

Project Management ページからApp IDCertificate を有効化し取得します。

トークンをプログラムで作成しなくても使えるモードがあるのですが、
primary Certificate を有効にするとトークンを払い出さないと動かなくなります。
Projectは複数作れるので、primaryを作らないProjectを作って分けることもできます。

RTM編:: トークン払い出しのプログラムを書く

基本ドキュメントに従って進めます。
RTM Tokens作成のドキュメント

まず、Githubに各言語で書かれたサンプルがあります。
https://github.com/AgoraIO/Tools/tree/master/DynamicKey/AgoraDynamicKey

プログラムに渡す変数はドキュメントのAPI referenceに書いてあります。

Nodeのプログラム

今回は、Nodeの項目を参考にしながら進めます。
https://github.com/AgoraIO/Tools/tree/master/DynamicKey/AgoraDynamicKey/nodejs/sample

まず、必要なライブラリを取得します

npm i agora-access-token

RTMトークン作成

管理画面で取得した App ID Certificate と、ユーザを識別する一意な値 を生成して与えることで、トークン生成できます。
ユーザを識別する一意な値 は一意で任意の文字列です。

RTMトークン
const {RtcTokenBuilder, RtmTokenBuilder, RtcRole, RtmRole} = require('agora-access-token')

const appID  = "970CA35de60c44645bbae8a215061b33";// <- App ID
const appCertificate = "5CFd2fd1755d40ecb72977518be15d3b";// <- Certificate
const account = `user_${Math.floor( Math.random() * 10**5 )}`;// ユーザごとに一意となる任意の文字列

const expirationTimeInSeconds = 60 * 60;// トークンの有効期間
const currentTimestamp = Math.floor(Date.now() / 1000);

const privilegeExpiredTs = currentTimestamp + expirationTimeInSeconds;

const token = RtmTokenBuilder.buildToken(appID, appCertificate, account, RtmRole, privilegeExpiredTs);

console.log("Rtm Token: " + token);// トークン出力完了!
console.log("account: " + account);// account
出力されたトークンが使用できるか

正常なトークンが生成できているか、確認ページで確認します。
https://tomgithubn.github.io/pages/Agora-RTM-Web-Sample/index.html

RTC編:: トークン払い出しのプログラムを書く

基本ドキュメントに従って進めます。
RTC Tokens作成のドキュメント

プログラムに渡す変数はドキュメントのAPI referenceに書いてあります。

トークンを作るには、 App IDCertificate 以外に、ユーザ識別のユニークな値チャンネル名ユーザ権限トークンの有効期間 が必要です。

ユーザ識別のユニークな値 は、account か uid を選べます。
どちらでも、大きな違いはなさそうです。ここでは、accountで作成します。

ユーザ識別のユニークな値チャンネル名 は一意で任意の文字列です。

ユーザ権限

  • PUBLISHER(=1) : 公開権限あり
  • SUBSCRIBER(=2): 公開権限なし
    があります。

Nodeのプログラム

今回は、Nodeの項目を参考にしながら進めます。
https://github.com/AgoraIO/Tools/blob/master/DynamicKey/AgoraDynamicKey/nodejs/sample/RtcTokenBuilderSample.js

まず、必要なライブラリを取得します

npm i agora-access-token

RTCトークン作成

RTCトークン
const RtcTokenBuilder = require('agora-access-token').RtcTokenBuilder;
const RtcRole = require('agora-access-token').RtcRole;

const appID  = "970CA35de60c44645bbae8a215061b33";// <- App ID
const appCertificate = "5CFd2fd1755d40ecb72977518be15d3b";// <- Certificate

const channelName = '7d72365eb983485397e3e3f9d460bdda';// <- ユーザが所属するチャンネル名(任意の文字列)
const account = `user_${Math.floor( Math.random() * 10**5 )}`;// ユーザごとに一意となる任意の文字列
const role = RtcRole.PUBLISHER;//トークンの権限 RtcRole.PUBLISHER or RtcRole.SUBSCRIBER

const expirationTimeInSeconds = 60 * 60;// トークンの有効期間

const currentTimestamp = Math.floor(Date.now() / 1000);

const privilegeExpiredTs = currentTimestamp + expirationTimeInSeconds;


// Build token with user account
const token = RtcTokenBuilder.buildTokenWithAccount(appID, appCertificate, channelName, account, role, privilegeExpiredTs);


console.log("Rtc Token: " + token);// トークン出力完了!
console.log("account: " + account);// account
console.log("channelName: " + channelName);// channelName
出力されたトークンが使用できるか

正常なトークンが生成できているか、確認ページで確認します。
https://webdemo.agora.io/basicLive/index.html

おまけ

Agora公式のサービスデモサイト一覧
https://webdemo.agora.io/

以上です。

Discussion