ダウンロードしてAppをインストールすると、ボイスサロンの機能をご体験いただけます。これには、ボイスチャット、マイクのオン・オフ、低遅延音声インタラクションなどのボイスチャットシナリオにおけるTRTCの関連機能が含まれています。
管理者によるマイク操作 | リスナーによるマイク操作 |
---|---|
![]() |
![]() |
ボイスサロン機能にすばやくアクセスする必要がある場合、当社が提供するAppをもとに直接変更を加えて適応させるか、または当社が提供するTUIChatSalonコンポーネントでカスタマイズしたUIを実装することができます。
TestChatSalon
)を入力し、作成をクリックします。注意:本機能はTencent CloudのTRTCとIMという2つの基本的なPaaSサービスを同時に使用し、TRTCをアクティブにした後、IMサービスを同期的にアクティブにすることができます。IMは付加価値サービスであり、課金ルールの詳細については、Instant Messagingの料金説明をご参照ください。
クリックしてTUIChatSalonに進み、ソースコードをCloneまたはダウンロードします。
設定変更画面に進み、ダウンロードしたソースコードパッケージに基づき、対応する開発環境を選択します。
TUIChatSalon/Debug/GenerateTestUserSig.swift
ファイルを見つけて開きます。
GenerateTestUserSig.swift
ファイル内の関連パラメータを設定します。
貼り付け完了後、貼り付けました。次のステップをクリックすれば、作成が完了します。
コンパイル完了後、 コンソール概要に戻る をクリックすれば終了です。
注意:
- ここで言及するUserSigの発行方法は、クライアントコードの中でのSECRETKEY設定となりますが、この手法のSECRETKEYは逆コンパイルによって逆クラッキングされやすく、キーがいったん漏洩すると、攻撃者がお客様のTencent Cloudトラフィックを盗用できるようになります。そのためこの手法は、ローカルのAppクイックスタートおよび機能デバッグにのみ適しています。
- UserSigの正しい発行方法は、UserSigの計算コードをサーバーに統合し、Appのインターフェース向けに提供します。UserSigが必要なときは、Appから業務サーバーにリクエストを発出し動的にUserSigを取得します。詳細はUserSigに関するご質問をご参照ください。
Xcode(11.0およびそれ以降のバージョン)を使用してソースコードプロセスTUIChatSalon/TUIChatSalonApp.xcworkspace
を開き、 実行をクリックすれば、このAppのデバッグが開始されます。
ソースコードのSource
フォルダは、uiとmodelの2つのサブフォルダを含んでいます。uiフォルダには、インターフェースコードとインターフェース関連のロジックが含まれています。以下の表にはそれぞれのswiftファイルまたはフォルダおよびそれらが対応するUIをリストアップして、二次調整を行いやすくしています。
ファイルまたはフォルダ | 機能の説明 |
---|---|
TRTCChatSalonEnteryControl.swift | このファイルには、すべてのViewController初期化メソッドが含まれています。このインスタンスを介してViewControllerオブジェクトをすばやく取得することができます。 |
TRTCCreateChatSalonViewController | ルーム作成ページのロジックを作成します。 |
TRTCChatSalonViewController | メインルームページ。管理者およびリスナーという2種類のインターフェースがあります。 |
注意:体験アプリケーションには、少なくとも2台のデバイスが必要です。
注意:ルームナンバーはユーザーAのルーム上部に表示されます。
ソースコードのSource
フォルダには、uiとmodelという2つのサブフォルダがあり、modelフォルダには再利用できるオープンソースコンポーネントTRTCChatSalonが含まれています。TRTCChatSalon.h
ファイルでこのコンポーネントが提供するインターフェース関数を確認し、対応するインターフェースを使用してカスタマイズしたUIを実装することができます。
ボイスサロンコンポーネントTRTCChatSalonは、TRTC SDKとIM SDKに依存し、次の手順で2つのSDKをプロジェクトに統合することができます。
方法1:cocoapodsリポジトリを介する依存
pod 'TXIMSDK_iOS'
pod 'TXLiteAVSDK_TRTC'
方法2:ローカルを介する依存
開発環境でのcocoapodsリポジトリへのアクセスが遅い場合は、ZIPパッケージを直接ダウンロードし、統合ドキュメントに従って手動でプロジェクトに統合することができます。
SDK | ダウンロードページ | 統合ガイド |
---|---|---|
TRTC SDK | DOWNLOAD | 統合ドキュメント |
IM SDK | DOWNLOAD | 統合ドキュメント |
info.plist
ファイルにPrivacy > Camera Usage Description
、Privacy > Microphone Usage Description
を追加し、マイクの権限を申請する必要があります。
cocoapodsを介してコンポーネントをインポートします。具体的な操作は次のとおりです。
Source
、Resources
、TXAppBasic
フォルダ、TUIChatSalon.podspec
ファイルをプロジェクトディレクトリ下へコピーします。Podfile
ファイル内に以下の依存関係を追加します。その後、pod install
コマンドを実行すると、インポートが完了します。pod 'TXAppBasic', :path => "TXAppBasic/"
pod 'TXLiteAVSDK_TRTC'
pod 'TUIChatSalon', :path => "./", :subspecs => ["TRTC"]
sharedInstance
クラスメソッドを呼び出すと、TRTCChatSalonのインスタンスオブジェクトを作成できます。setDelegate
メソッドを呼び出して、コンポーネントのイベントコールバック通知を登録します。login
メソッドを呼び出して、コンポーネントのログインを完了します。下表を参考にキーパラメータを入力してください。パラメータ名 | 機能 |
---|---|
sdkAppId | TRTCコンソール で SDKAppIDを表示できます。 |
userId | 現在のユーザーID。文字列タイプでは、英語のアルファベット(a-z、A-Z)、数字(0-9)、ハイフン(-)とアンダーライン(_)のみ使用できます。業務の実際のアカウントシステムと組み合わせてご自身で設定することをお勧めします。 |
userSig | Tencent Cloudによって設計されたセキュリティ保護署名。取得方法については、UserSigの計算方法をご参照ください。 |
callback | ログインのコールバック。成功時にcodeは0になります。 |
// Swift例
// コード内でビジネスロジックを担当するクラス
class YourController {
// 属性を計算してシングルトンオブジェクトを取得
var chatSalon: TRTCChatSalon {
return TRTCChatSalon.shared()
}
// その他のコードロジック
......
}
// chatSalonプロキシの設定
self.chatSalon.setDelegate(delegate: self)
// コール方法は以下のとおり。クロージャ―の中には weak self を使用して循環引用にしないことをお勧めします(以下の例示コードでは、 weak self 例を省略)
self.chatSalon.login(sdkAppID: sdkAppID, userID: userId, userSig: userSig) { [weak self] (code, message) in
guard let `self` = self else { return }
// コールバックビジネスロジック
}
setSelfProfile
を呼び出して自身のニックネームおよびプロフィール画像を設定することができます。createRoom
を呼び出して新しいボイスサロンを作成します。この時、ルームID、マイク・オンにすることの管理者の確認の要否、ルームタイプなどルームの属性情報を渡します。onAnchorEnterSeat
というイベント通知を受信します。この時、マイク集音は自動的に開始されます。// 1.管理者は、ニックネームおよびプロフィール画像を設定します
self.chatSalon.setSelfProfile(userName: userName, avatarUrl: avatarURL) { (code, message) in
// 結果のコールバック
}
// 2.管理者側でルームを作成します
let param = ChatSalonParam.init()
Param.roomName = "ルーム名"
param.needRequest = true // リスナーのマイク・オンに対する管理者の同意の要否
param.coverUrl = "カバーURL"
param.seatInfoList = []
self.chatSalon.createRoom(roomID: yourRoomID, roomParam: param) { (code, message) in
guard code == 0 else { reutrn }
// 3.ルーム作成成功後、席の占有を開始
self.chatSalon.enterSeat { [weak self] (code, message) in
guard let `self` = self else { return }
if code == 0 {
// 管理者による席の占有成功
}else{
// 管理者による席の占有失敗
}
}
}
// 4. 席の占有の成功後、onAnchorEnterSeatイベント通知を受信します
func onAnchorEnterSeat(user: ChatSalonUserInfo) {
}
setSelfProfile
を呼び出して自身のニックネームおよびプロフィール画像を設定することができます。説明:Appのボイスサロンリストは、デモンストレーション用のためだけのものです。ボイスサロンリストのビジネスロジックは様々です。Tencent Cloudでは現在ボイスサロンリストの管理サービスを提供していません。ご自身でボイスサロンリストを管理してください。
getRoomInfoList
を呼び出して、ルームの詳細情報を取得します。この情報は、管理者側がcreateRoom
を呼び出してボイスサロンを作成するときに設定する簡単な説明情報です。
注意:ボイスサロンリストに十分に包括的な情報がある場合は、
getRoomInfoList
の呼び出しに関する手順をスキップできます。
enterRoom
を呼び出してルームナンバーを渡すと、そのルームに参加できます。onRoomInfoChange
ルーム属性変更イベント通知を受信します。この時、ルーム属性を記録し、それに応じた修正を行うことができます。例:UIに表示するルーム名、発言者にする際の管理者への同意リクエストの要否の記録など。onAnchorEnterSeat
のイベント通知も受信します。// 1.リスナーは、ニックネームおよびプロフィール画像を設定します
self.chatSalon.setSelfProfile(userName: userName, avatarUrl: avatarURL) { (code, message) in
// 結果のコールバック
}
// 2.業務バックエンドから取得したルームリストをroomListと仮定します
let roomList: [Int] = getRoomIDList() // ルームIDリストを取得する関数
// 3. getRoomInfoListを呼び出すことによって、ルームの詳細情報を取得します
self.chatSalon.getRoomInfoList(roomIdList: roomIdsInt) { (code, message, roomInfos: [ChatSalonInfo]) in
//結果の取得。この時、UIの更新が可能
}
// 4.roomIdを渡してルームに参加します
self.chatSalon.enterRoom(roomID: roomInfo.roomID) { (code, message) in
// 入室結果コールバック
if code == 0 {
// 入室に成功
}
}
// 5.入室に成功後、onRoomInfoChangeイベント通知を受信します
func onRoomInfoChange(roomInfo: ChatSalonInfo) {
// ルーム名などの情報の更新可
}
// 6. onAnchorEnterSeatイベント通知を受信します
func onAnchorEnterSeat(user: ChatSalonUserInfo) {
// マイク・オンイベントの処理
}
pickSeat
は、リスナーのuserIdを渡し、発言できるように視聴者を招待できます。ルーム内の全メンバーはonAnchorEnterSeat
というイベント通知を受信します。kickSeat
で該当するユーザーのuserIdを渡すと、その人をキックアウトしてマイク・オフにできます。ルーム内の全メンバーがonAnchorLeaveSeat
のイベント通知を受信します。// 1.管理者が、視聴者を発言できるように招待できます
self.chatSalon.pickSeat(userID: "123") { (code, message) in
// 2. callbackコールバックを受信します
}
// 3.リスナーがキャスターとしてマイク通知に進むと、リスナーが実際にマイク・オンに成功したかどうかを判断できます
func onAnchorEnterSeat(user: ChatSalonUserInfo) {
// マイク・オンイベントの処理
}
Appにおいて相手の同意がなければ、次の操作の業務フローを実施できない場合は、招待シグナリングによって相応のサポートを行うことができます。
sendInvitation
を呼び出し、管理者のuserIdおよび業務のカスタムコマンドワードなどを渡します。この時、関数が1つのinviteIdを返しますので、このinviteIdを記録します。onReceiveNewInvitation
というイベント通知を受信します。この時UIでウィンドウをポップアップさせ、管理者に同意の有無をたずねることができます。acceptInvitation
を呼び出してinviteIdを渡します。onInviteeAccepted
というイベント通知を受信し、enterSeat
を呼び出してマイク・オンにします。// リスナー側の視点
// 1.sendInvitationを呼び出し、マイク・オンをリクエストします
let inviteId = self.chatSalon.sendInvitation(cmd: "ENTER_SEAT", userID: ownerUserId, content: "1") { (code, message) in
// 発信結果のコールバック
}
// 2.招待のリクエスト同意を受信し、正式にマイク・オンになります
func onInviteeAccepted(identifier: String, invitee: String) {
if identifier == selfID {
self.chatSalon.enterSeat { (code, message) in
// マイク・オン結果のコールバック
}
}
}
// 管理者側の視点
// 1.管理者がリクエストを受信します
func onReceiveNewInvitation(identifier: String, inviter: String, cmd: String, content: String) {
if cmd == "ENTER_SEAT" {
// 2.管理者がリスナーのリクエストに同意します
self.chatSalon.acceptInvitation(identifier: identifier, callback: nil)
}
}
sendRoomTextMsg
によって通常のテキストメッセージを送信できるようになり、このルーム内のすべてのキャスターおよびリスナーがonRecvRoomTextMsg
のコールバックを受信することができます。
IMバックエンドは、デフォルトでNGワードフィルター規則を有し、NGワードと認識されたテキストメッセージはクラウドに転送されることはありません。
// 発信側:テキストメッセージの発信
self.chatSalon.sendRoomTextMsg(message: message) { (code, message) in
}
// 受信側:テキストメッセージのモニタリング
func onRecvRoomTextMsg(message: String, userInfo: ChatSalonUserInfo) {
// 受信したmessage情報の処理方法
}
sendRoomCustomMsg
によって、カスタム(シグナル)メッセージを送信できます。当該ルーム内のすべてのキャスターとリスナーがonRecvRoomCustomMsg
コールバックを受信できます。
カスタムメッセージは、カスタマイズ信号の送信によく用いられます。例えば、「いいね」情報の発信やブロードキャストに使用します。
// 例:発信側:カスタマイズCmdによって、弾幕と「いいね」情報を区分することができます
// eg:「CMD_DANMU」は弾幕コメントを表し、「CMD_LIKE」は「いいね」情報を表します
self.chatSalon.sendRoomCustomMsg(cmd: "CMD_DANMU", message: "hello world", callback: nil)
self.chatSalon.sendRoomCustomMsg(cmd: "CMD_LIKE", message: "", callback: nil)
// 受信側:カスタムメッセージのモニタリング
func onRecvRoomCustomMsg(cmd: String, message: String, userInfo: ChatSalonUserInfo) {
if cmd == "CMD_DANMU" {
// 弾幕コメントの受信
}
if cmd == "CMD_LIKE" {
// 「いいね」情報の受信
}
}
この記事はお役に立ちましたか?