TUIRoomKit 컴포넌트를 통합하는 방법을 안내해 드립니다. 본 지침에 따르면, 10분 내에 아래 주요 단계들을 완료하고, 마지막에 완전한 UI 인터페이스를 갖춘 오디오/비디오 회의 기능을 구현할 수 있습니다.
Android 디렉터리의 timcommon, tuiroomkit 서브 디렉터리를 현재 프로젝트의 app 동급 디렉터리로 복사합니다.
setting.gradle(또는 settings.gradle.kts) 파일을 찾고 아래 코드를 추가합니다. 그 기능은 tuiroomkit 컴포넌트를 현재 프로젝트로 가져오는 것입니다.include ':timcommon'include ':tuiroomkit'
include (":timcommon") include (":tuiroomkit")
build.gradle(또는 build.gradle.kts) 파일을 찾고 아래 코드를 추가합니다. 그 기능은 새로 추가된 tuiroomkit 컴포넌트에 대한 현재 app의 종속성을 선언하는 것입니다.api project(':tuiroomkit')
api(project(":tuiroomkit"))
-keep class com.tencent.** { *; }
// app/src/main/AndroidManifest.xml<application android:name=".DemoApplication" android:allowBackup="false" android:icon="@drawable/app_ic_launcher" android:label="@string/app_name" android:largeHeap="true" android:theme="@style/AppTheme" tools:replace="android:allowBackup">
TUILogin의 관련 인터페이스를 호출하여 컴포넌트의 로그인을 완료하는 것입니다. 이 단계는 아주 중요합니다. 로그인 후에만 TUIRoomKit의 각 기능을 정상적으로 사용할 수 있기 때문에 관련 매개변수의 구성이 정확한지 여부를 세심하게 확인하시기 바랍니다.import com.tencent.qcloud.tuicore.TUILogin; import com.tencent.qcloud.tuicore.interfaces.TUICallback;import com.tencent.cloud.tuikit.roomkit.debug.GenerateTestUserSig;String userId = "denny"; // 당신의 UserID로 교체하시기 바랍니다.int sdkAppId = 1400000001; // 단계 1에서 획득한 sdkAppId로 교체하시기 바랍니다.String sdkSecretKey = "xxxx"; // 당신의 sdkSecretKey로 교체하시기 바랍니다.String userSig = GenerateTestUserSig.genTestUserSig(sdkAppId, userId, sdkSecretKey);TUILogin.login(context,sdkAppId,userId,userSig,new TUICallback() {@Overridepublic void onSuccess() {}@Overridepublic void onError(int errorCode, String errorMessage) {}});
import com.tencent.qcloud.tuicore.TUILogin import com.tencent.qcloud.tuicore.interfaces.TUICallbackimport com.tencent.cloud.tuikit.roomkit.debug.GenerateTestUserSigval userId = "denny" // 당신의 UserID로 교체하시기 바랍니다.val sdkAppId = 1400000001 // 단계 1에서 획득한 sdkAppId로 교체하시기 바랍니다.val sdkSecretKey = "xxxx" // 당신의 sdkSecretKey로 교체하시기 바랍니다.val userSig = GenerateTestUserSig.genTestUserSig(sdkAppId, userId, sdkSecretKey)TUILogin.login(this,sdkAppId,userId,userSig,object : TUICallback() {override fun onSuccess() {}override fun onError(errorCode: Int, errorMessage: String) {}})
TUILogin.login 함수 매개변수 설명: |
SDKAppID: 서비스 활성화의 마지막 단계에서 획득합니다. UserID: 현재 사용자의 ID로 문자열 유형이며 영어 문자(az 및 AZ), 숫자(0~9), 하이픈(-) 및 밑줄(_)만 허용합니다. UserSig: 서비스 활성화의 세 번째 단계에서 획득한 SDKSecretKey로 SDKAppID, UserID 등 정보를 암호화하여 얻을 수 있으며, UserSig는 Tencent Cloud에서 현재 사용자가 TRTC의 서비스를 이용할 수 있는지 여부를 식별하는 데 사용되는 인증용 티켓입니다. 콘솔의 보조 툴을 통해 하나의 임시 사용 가능한 UserSig를 생성할 수 있습니다.자세한 내용은 UserSig 계산 및 사용 방법을 참고하시기 바랍니다. 설명: 개발 환경: 로컬 개발 디버깅 단계에 있다면, 로컬 GenerateTestUserSig.genTestUserSig() 함수를 사용하여 userSig를 생성할 수 있습니다. 이 방법에서 SDKSecretKey는 역컴파일에 의해 쉽게 해독되며, 암호키가 유출되면 공격자가 당신의 Tencent Cloud 트래픽을 도용할 수 있습니다. 생산 환경: 프로젝트 출시 예정이면 서버 측 UserSig 생성 방식을 사용하시기 바랍니다. |
app/src/main/res/layout(layout 디렉터리가 없으면 하나 생성할 수 있음)에서 activity_conference.xml 파일을 생성하고 인터페이스 레이아웃을 추가합니다.<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/conference_container" android:layout_width="match_parent" android:layout_height="match_parent" />
import com.tencent.cloud.tuikit.roomkit.ConferenceError; import com.tencent.cloud.tuikit.roomkit.ConferenceMainFragment; import com.tencent.cloud.tuikit.roomkit.ConferenceObserver;public class ConferenceOwnerActivity extends AppCompatActivity {private ConferenceObserver mConferenceObserver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_conference);ConferenceMainFragment fragment = new ConferenceMainFragment();mConferenceObserver = new ConferenceObserver() {@Overridepublic void onConferenceStarted(String conferenceId, ConferenceError error) {super.onConferenceStarted(conferenceId, error);if (error != ConferenceError.SUCCESS) {return;}FragmentManager manager = getSupportFragmentManager();FragmentTransaction transaction = manager.beginTransaction();transaction.add(R.id.conference_container, fragment);transaction.commitAllowingStateLoss();}};fragment.setConferenceObserver(mConferenceObserver);// ‘123456’을 당신의 사용자 정의 방 번호로 교체하시기 바랍니다.fragment.quickStartConference("123456");}}
import com.tencent.cloud.tuikit.roomkit.ConferenceError import com.tencent.cloud.tuikit.roomkit.ConferenceMainFragment import com.tencent.cloud.tuikit.roomkit.ConferenceObserverclass ConferenceOwnerActivity : AppCompatActivity() { private var mConferenceObserver : ConferenceObserver? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_conference) var fragment = ConferenceMainFragment() mConferenceObserver = object: ConferenceObserver() { override fun onConferenceStarted(conferenceId: String?, error: ConferenceError?) { super.onConferenceStarted(conferenceId, error) if (error != ConferenceError.SUCCESS) { return } val fragmentManager = supportFragmentManager val transaction = fragmentManager.beginTransaction() transaction.add(R.id.conference_container, fragment) transaction.commitAllowingStateLoss() } } fragment.setConferenceObserver(mConferenceObserver) // Replace "123456" with the corresponding conference number fragment.quickStartConference("123456") } }
<!--app/src/main/AndroidManifest.xml --><?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <application ... <activity ... </activity><!-- 아래 코드를 추가하여 ConferenceOwnerActivity 등록 --> <activity android:name=".ConferenceOwnerActivity" /> </application> </manifest>
import android.content.Intent;import android.os.Bundle;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// 회의 인터페이스 시작하기 Intent intent = new Intent(MainActivity.this, ConferenceOwnerActivity.class); startActivity(intent); } }
import android.content.Intentimport android.os.Bundleimport androidx.appcompat.app.AppCompatActivityclass MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 회의 인터페이스 시작하기val intent = Intent(this, ConferenceOwnerActivity::class.java)startActivity(intent)}}
import android.util.Log;import com.tencent.cloud.tuikit.roomkit.ConferenceError; import com.tencent.cloud.tuikit.roomkit.ConferenceMainFragment; import com.tencent.cloud.tuikit.roomkit.ConferenceObserver;public class ConferenceGeneralActivity extends AppCompatActivity {private ConferenceObserver mConferenceObserver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_conference);ConferenceMainFragment fragment = new ConferenceMainFragment();mConferenceObserver = new ConferenceObserver() {@Overridepublic void onConferenceJoined(String conferenceId, ConferenceError error) {super.onConferenceJoined(conferenceId, error);if (error != ConferenceError.SUCCESS) {return;}FragmentManager manager = getSupportFragmentManager();FragmentTransaction transaction = manager.beginTransaction();transaction.add(R.id.conference_container, fragment);transaction.commitAllowingStateLoss();}};fragment.setConferenceObserver(mConferenceObserver);// ‘123456’을 당신이 가입할 방 번호로 교체하시기 바랍니다.fragment.joinConference("123456");}}
import android.util.Logimport com.tencent.cloud.tuikit.roomkit.ConferenceError import com.tencent.cloud.tuikit.roomkit.ConferenceMainFragment import com.tencent.cloud.tuikit.roomkit.ConferenceObserverclass ConferenceGeneralActivity : AppCompatActivity() { private val tag: String = "ConferenceGeneralActivity" private var mConferenceObserver : ConferenceObserver? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_conference) var fragment = ConferenceMainFragment() mConferenceObserver = object: ConferenceObserver() { override fun onConferenceJoined(conferenceId: String?, error: ConferenceError?) { super.onConferenceJoined(conferenceId, error) if (error != ConferenceError.SUCCESS) { Log.e(tag, "Error : $error") return } val fragmentManager = supportFragmentManager val transaction = fragmentManager.beginTransaction() transaction.add(R.id.conference_container, fragment) transaction.commitAllowingStateLoss() } } fragment.setConferenceObserver(mConferenceObserver) // Replace "123456" with the corresponding conference number fragment.joinConference("123456") } }
<!--app/src/main/AndroidManifest.xml --><?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <application ... <activity ... </activity><!-- 아래 코드를 추가하여 ConferenceOwnerActivity 등록 --> <activity android:name=".ConferenceOwnerActivity" /><!-- 아래 코드를 추가하여 ConferenceGeneralActivity 등록 --><activity android:name=".ConferenceGeneralActivity" /> </application> </manifest>
import android.content.Intent;import android.os.Bundle;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// 회의 인터페이스 시작하기 Intent intent = new Intent(MainActivity.this, ConferenceGeneralActivity.class); startActivity(intent); } }
import android.content.Intentimport android.os.Bundleimport androidx.appcompat.app.AppCompatActivityclass MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 회의 인터페이스 시작하기val intent = Intent(this, ConferenceGeneralActivity::class.java)startActivity(intent)}}
회의 메인 인터페이스 | 사용자 목록 |
![]() | ![]() |
피드백