그룹 통화 시작하기
PlanetKit을 사용하면 1대1 통화 또는 그룹 통화를 위한 음성 및 영상 통화 기능을 앱에 연동할 수 있습니다. 이 가이드에서는 Android 앱에서 그룹 음성 통화 구현을 시작하는 방법을 설명합니다.
더욱 빠른 개발을 위해 빠른 시작을 기반으로 앱을 구현할 수 있습니다.
필수 조건
- 사용 중인 시스템이 시스템 요구사항을 충족하는지 확인하세요.
- API key를 생성하세요. 자세한 내용은 개발 환경을 참조하세요.
- 액세스 토큰을 생성하는 앱 서버 코드를 구현하세요. 자세한 내용은 액세스 토큰 생성 방법을 참조하세요.
- Android Studio가 아직 설치되지 않은 경우 Android Studio를 설치하세요.
프로젝트 생성
Android Studio를 열고 아래와 같이 새 프로젝트를 만드세요.
- [Welcome to Android Studio] 창에서 [New Project]를 클릭하세요.
- [Empty Activity]를 선택하고 [Next]를 클릭하세요.
- [New Project] 창에서 아래와 같이 설정하세요.
- [Name] 필드에 프로젝트 이름을 입력하세요.
- [Minimum SDK]에서 API 레벨 21 이상을 선택하세요.
- [Build configuration language]에서 'Groovy DSL (build.gradle)'을 선택하세요.
- [Finish]를 클릭하세요.
SDK 설치
Gradle을 사용해 SDK를 설치합니다. 모듈 수준 build.gradle
파일에 아래 종속성을 추가하세요.
dependencies {
...
implementation 'com.linecorp.planetkit:planetkit:5.5.0'
...
}
Android용 PlanetKit은 버전 5.3.3부터 Maven Central Repository를 통해 배포됩니다.
프로젝트에 Maven Central Repository가 설정돼 있지 않은 경우 다음과 같이 설정하세요.
// Root-level build.gradle
allprojects {
repositories {
mavenCentral()
}
}
시스템 권한 요청
음성 통화 기능을 활성화하려면 Android용 PlanetKit에 시스템 권한이 필요합니다. PlanetKit의 AndroidManifest.xml
에 다음 권한이 포함되어 있습니다.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
사용자는 처음 앱을 실행할 때 런타임 권한을 부여해야 합니다. 이를 위해 다음과 같이 RECORD_AUDIO
, READ_PHONE_STATE
, BLUETOOTH_CONNECT
권한을 요청하세요.
fun checkAllRequirePermissions(context: Context): MutableList<String> {
val permissions: MutableList<String> = mutableListOf()
if (ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO)
!= PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.RECORD_AUDIO)
}
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.READ_PHONE_STATE)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
&& ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_CONNECT)
!= PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.BLUETOOTH_CONNECT)
}
return permissions
}
fun requestPermissions(activity: Activity, permissions: Array<String>) {
ActivityCompat.requestPermissions(activity, permissions,0)
}
val requirePermissions = checkAllRequirePermissions(this)
if (requirePermissions.isNotEmpty()) {
requestPermissions(this, requirePermissions.toTypedArray())
return
}
- 영상 통화의 경우
CAMERA
권한도 추가로 요청해야 합니다. - 런타임 권한 요청에 대한 자세한 내용은 Android 공식 문서를 참조하세요.
SDK 초기화
PlanetKit API를 호출하려면 먼저 PlanetKit을 초기화해야 합니다. PlanetKitConfiguration
객체와 함께 PlanetKit.initialize()
를 사용해 PlanetKit을 초기화하세요.
PlanetKit.initialize()
를 호출하기 전에 PlanetKitConfiguration
객체에 서버 URL(planet_base_url
)을 설정해야 합니다. 사용 중인 개발 환경에 따라 적절한 planet_base_url
을 사용하세요.
val config = PlanetKit.PlanetKitConfiguration.Builder(getApplicationContext())
.setServerUrl(planet_base_url)
.build()
PlanetKit.initialize(config) { isSuccessful, isVideoHwCodecSupport, userAgent ->
// Implement the completion callback if necessary
}
앱에서 PlanetKit.initialize()
메서드를 최초에 한 번 호출해야 합니다. Application
인스턴스의 onCreate()
메서드에서 SDK를 초기화하는 것이 좋습니다.
액세스 토큰 획득
클라이언트 앱에서 앱 서버에 액세스 토큰 생성을 요청해 받으세요.
PlanetKit.joinConference()
를 호출할 때마다 새로운 액세스 토큰을 받아서 사용해야 합니다.
그룹 음성 통화 참여
그룹 음성 통화에 참여하려면 다음 인자와 함께 PlanetKit.joinConference()
를 호출하세요.
- 아래 속성을 포함하는
PlanetKitConferenceParam
객체myId
: 로컬 사용자의 사용자 IDroomId
: 방 IDmyServiceId
: 로컬 사용자의 서비스 IDroomServiceId
: 방의 서비스 IDaccessToken
: 액세스 토큰
- 이벤트 콜백이 구현된
ConferenceListener
객체
val param = PlanetKitConferenceParam.Builder()
.myId(userId)
.roomId(roomId)
.myServiceId(serviceId)
.roomServiceId(serviceId)
.accessToken(accessToken)
.build()
val result = PlanetKit.joinConference(param, conferenceListener = object : ConferenceListener {
override fun onConnected(conference: PlanetKitConference,
isVideoHwCodecEnabled: Boolean,
isVideoShareModeSupported: Boolean) {
// This is called when the call is connected.
// Write your own code here.
}
override fun onDisconnected(conference: PlanetKitConference,
param: PlanetKitDisconnectedParam) {
// This is called when the call is disconnected.
// Write your own code here.
}
override fun onPeerListUpdated(param: PlanetKitConferencePeerListUpdatedParam) {
// This is called when the list of peers is updated.
// Write your own code here.
}
})
if (result.reason == PlanetKitStartFailReason.NONE && result.conference != null) {
// The "result.conference" instance is the main instance to call APIs from now on.
// You must keep it to control this call.
}
else {
// Handle an error by referring to result.reason.
}
사용자가 클라이언트 앱에서 그룹 통화 방에 입장하려면 방 ID가 필요하므로, 애플리케이션에서 정의한 통신 채널을 통해 방 ID를 다른 사용자와 공유해야 합니다.
다음 단계
아래 문서를 참조해 PlanetKit에서 제공하는 다양한 기능과 각 기능의 사용 방법을 자세히 살펴보세요.