통합

본 문서는 짧은 시간 내에 TUIRoomKit 컴포넌트를 통합하는 방법을 안내해 드립니다. 본 지침에 따르면, 10분 내에 아래 주요 단계들을 완료하고, 마지막에 완전한 UI 인터페이스를 갖춘 오디오/비디오 회의 기능을 구현할 수 있습니다.
회의 인터페이스 및 일부 기능 효과 표시




환경 준비

최소 Android 4.4(SDK API Level 19) 호환, Android 5.0(SDK API Level 21) 및 그 이상의 버전을 권장합니다.
Android Studio 3.5 및 그 이상의 버전(Gradle 3.5.4 및 그 이상의 버전).
Android 4.4 및 그 이상의 모바일 기기.

단계 1: 서비스 활성화

TUIRoomKit를 사용하여 회의를 개시하기 전에 콘솔로 이동하여 TUIRoomKit 전용 다중 사용자 오디오/비디오 인터랙션 서비스를 활성화해야 하며, 구체적인 방법은 서비스 활성화를 참고하시기 바랍니다.

단계 2: TUIRoomKit 컴포넌트 다운로드

1. Github에서 코드를 복제/다운로드하고, 아래 그림과 같이 Android 디렉터리의 timcommon, tuiroomkit 서브 디렉터리를 현재 프로젝트의 app 동급 디렉터리로 복사합니다.


단계 3: 프로젝트 구성

1. 프로젝트 루트 디렉터리에서 setting.gradle(또는 settings.gradle.kts) 파일을 찾고 아래 코드를 추가합니다. 그 기능은 tuiroomkit 컴포넌트를 현재 프로젝트로 가져오는 것입니다.
settings.gradle
setting.gradle.kts
include ':timcommon'
include ':tuiroomkit'
include (":timcommon") include (":tuiroomkit")
2. app 디렉터리에서 build.gradle(또는 build.gradle.kts) 파일을 찾고 아래 코드를 추가합니다. 그 기능은 새로 추가된 tuiroomkit 컴포넌트에 대한 현재 app의 종속성을 선언하는 것입니다.
build.gradle
build.gradle.kts
api project(':tuiroomkit')
api(project(":tuiroomkit"))
3. SDK 내부에서 Java의 리플렉션 기법을 사용하기 때문에 SDK의 일부 클래스를 난독화되지 않은 목록에 추가해야 하므로 proguard-rules.pro 파일에 다음 코드를 추가해야 합니다.
-keep class com.tencent.** { *; }
4. app 디렉터리에서 AndroidManifest.xml 파일을 찾고, application 노드에 tools:replace="android:allowBackup"을 추가하여 컴포넌트 내의 설정을 덮고 자신의 설정을 사용합니다.
// 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">

단계 4: 로그인

프로젝트에 아래 코드를 추가합니다. 그 기능은 TUILogin의 관련 인터페이스를 호출하여 컴포넌트의 로그인을 완료하는 것입니다. 이 단계는 아주 중요합니다. 로그인 후에만 TUIRoomKit의 각 기능을 정상적으로 사용할 수 있기 때문에 관련 매개변수의 구성이 정확한지 여부를 세심하게 확인하시기 바랍니다.
Java
Kotlin
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() {
@Override
public void onSuccess() {
}
@Override
public void onError(int errorCode, String errorMessage) {
}
});
import com.tencent.qcloud.tuicore.TUILogin import com.tencent.qcloud.tuicore.interfaces.TUICallback
import com.tencent.cloud.tuikit.roomkit.debug.GenerateTestUserSig

val 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: 서비스 활성화의 세 번째 단계에서 획득한 SDKSecretKeySDKAppID, UserID 등 정보를 암호화하여 얻을 수 있으며, UserSig는 Tencent Cloud에서 현재 사용자가 TRTC의 서비스를 이용할 수 있는지 여부를 식별하는 데 사용되는 인증용 티켓입니다. 콘솔의 보조 툴을 통해 하나의 임시 사용 가능한 UserSig를 생성할 수 있습니다.
자세한 내용은 UserSig 계산 및 사용 방법을 참고하시기 바랍니다.
설명:
개발 환경: 로컬 개발 디버깅 단계에 있다면, 로컬 GenerateTestUserSig.genTestUserSig() 함수를 사용하여 userSig를 생성할 수 있습니다. 이 방법에서 SDKSecretKey는 역컴파일에 의해 쉽게 해독되며, 암호키가 유출되면 공격자가 당신의 Tencent Cloud 트래픽을 도용할 수 있습니다.
생산 환경: 프로젝트 출시 예정이면 서버 측 UserSig 생성 방식을 사용하시기 바랍니다.

단계 5: 첫 번째 회의 개시

1. 프로젝트 디렉터리 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" />
2. ConferenceMainFragment는 회의 메인 인터페이스입니다. quickStartConference 방법(이 방법에서는 사용자 정의 방 번호를 입력함)을 호출하여 빠른 회의를 개시하고, 빠른 회의의 콜백 onConferenceStarted에서 ConferenceMainFragment를 현재 Activity에 추가하면 빠른 회의를 개시할 수 있습니다.
프로젝트에서 ConferenceOwnerActivity.java 파일을 생성합니다.
Java
Kotlin
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;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_conference);

ConferenceMainFragment fragment = new ConferenceMainFragment();
mConferenceObserver = new ConferenceObserver() {
@Override
public 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.ConferenceObserver

class 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 파일에 ConferenceOwnerActivity를 등록합니다.
<!--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>
주의:
ConferenceOwnerActivity는 반드시 AppCompatActivity를 상속해야 합니다. 그렇지 않으면 표시할 수 없게 됩니다.
ConferenceOwnerActivity는 반드시 AndroidManifest.xml 파일에 등록해야 합니다.
3. TUILogin.login 함수를 호출한 후 실제 업무에 따라 회의 개시가 필요한 곳에서 ConferenceOwnerActivity 회의 인터페이스를 시작할 수 있습니다. 예를 들어, 하나의 빈 프로젝트의 MainActivity.java에서 회의 인터페이스를 시작하는 예시 코드는 다음과 같습니다.
Java
Kotlin
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.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 회의 인터페이스 시작하기
val intent = Intent(this, ConferenceOwnerActivity::class.java)
startActivity(intent)
}
}

단계 6: 일반 구성원이 회의에 참가합니다.

1. ConferenceMainFragment는 회의의 메인 인터페이스입니다. joinConference 방법(이 방법에서는 가입할 방 번호를 입력함)을 호출하여 회의에 참가하고, 회의 참가의 콜백 onConferenceJoined에서 ConferenceMainFragment를 현재 Activity에 추가하면 현재 회의에 참가할 수 있습니다.
프로젝트에서 ConferenceGeneralActivity.java 파일을 생성합니다.
Java
Kotlin
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;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_conference);

ConferenceMainFragment fragment = new ConferenceMainFragment();
mConferenceObserver = new ConferenceObserver() {
@Override
public 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.Log
import com.tencent.cloud.tuikit.roomkit.ConferenceError import com.tencent.cloud.tuikit.roomkit.ConferenceMainFragment import com.tencent.cloud.tuikit.roomkit.ConferenceObserver

class 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 파일에 ConferenceGeneralActivity를 등록합니다.
<!--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>
주의:
ConferenceGeneralActivity는 반드시 AppCompatActivity를 상속해야 합니다. 그렇지 않으면 표시할 수 없게 됩니다.
ConferenceGeneralActivity는 반드시 AndroidManifest.xml 파일에 등록해야 합니다.
2. TUILogin.login 함수를 호출한 후 실제 업무에 따라 회의에 참가해야 하는 곳에서 ConferenceGeneralActivity 회의 인터페이스를 시작할 수 있습니다. 예를 들어, 하나의 빈 프로젝트의 MainActivity.java에서 회의 인터페이스를 시작하는 예시 코드는 다음과 같습니다.
Java
Kotlin
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.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 회의 인터페이스 시작하기
val intent = Intent(this, ConferenceGeneralActivity::class.java)
startActivity(intent)
}
}

인터페이스 표시

단계 1~단계 6을 성공적으로 완료하면 UI 인터페이스 효과는 다음과 같습니다.
회의 메인 인터페이스
사용자 목록



자주 받는 질문들

통합 및 사용 중에 문제가 있으면 자주 받는 질문들 을 참고하시기 바랍니다.

교류와 피드백

액세스 또는 사용 중에 질문 또는 건의가 있으면 info_rtc@tencent.com으로 연락주시기 바랍니다.