그룹 통화 시작하기
PlanetKit을 사용하면 1대1 통화 또는 그룹 통화를 위한 음성 및 영상 통화 기능을 앱에 연동할 수 있습니다. 이 가이드에서는 Flutter 앱에서 그룹 음성 통화 구현을 시작하는 방법을 설명합니다.
필수 조건
- 사용 중인 시스템이 시스템 요구사항을 충족하는지 확인하세요.
- API key를 생성하세요. 자세한 내용은 개발 환경을 참조하세요.
- 액세스 토큰을 생성하는 앱 서버 코드를 구현하세요. 자세한 내용은 액세스 토큰 생성 방법을 참조하세요.
프로젝트 생성
Set up an editor 문서를 참고하여 프로젝트를 생성하세요.
SDK 설치
-
pubspec.yaml
에 다음 코드를 추가하세요. 추가할 때{PLANET_KIT_VERSION}
은 사용하고자 하는 SDK 버전(예:v1.0.0
)으로 바꾸세요.dependencies:
flutter:
sdk: flutter
planet_kit_flutter:
git:
url: git@github.com:line/planet-kit-flutter.git
ref: {PLANET_KIT_VERSION} -
planet_kit_flutter
를 애플리케이션 소스 코드로 import 하세요.import 'package:planet_kit_flutter/planet_kit_flutter.dart';
시스템 권한 요청
Dart permission_handler 패키지를 사용하여 전화, 마이크, Bluetooth 연결 권한을 요청하세요.
import 'package:permission_handler/permission_handler.dart';
final status = await [Permission.microphone, Permission.phone, Permission.bluetoothConnect].request();
SDK 초기화
PlanetKit API를 호출하려면 먼저 PlanetKit을 초기화해야 합니다. PlanetKitInitParam
객체와 함께 PlanetKitManager
의 initializePlanetKit()
를 사용해 PlanetKit을 초기화하세요.
PlanetKit.initializePlanetKit()
를 호출하기 전에 PlanetKitInitParam
객체에 서버 URL을 설정해야 합니다. 사용 중인 개발 환경에 따라 적절한 planet_base_url
을 사용하세요.
Future<void> initializePlanetKit() async {
final serverUrl = "SERVER_URL";
final initParam = PlanetKitInitParam(
logSetting: PlanetKitLogSetting(
enabled: false,
logLevel: PlanetKitLogLevel.silent,
logSizeLimit: PlanetKitLogSizeLimit.small),
serverUrl: serverUrl);
final result =
await PlanetKitManager.instance.initializePlanetKit(initParam);
}
- 앱에서
initializePlanetKit()
메서드를 최초에 한 번 호출해야 합니다. 앱의initState()
메서드에서 SDK를 초기화하는 것이 좋습니다. - SDK 초기화와 로그 설정에 대한 자세한 정보는 PlanetKit 초기화 및 로그 설정을 참조하세요.
액세스 토큰 획득
클라이언트 앱에서 앱 서버에 액세스 토큰 생성을 요청해 받으세요.
PlanetKitManager
의 joinConference()
를 호출할 때마다 새로운 액세스 토큰을 받아서 사용해야 합니다.
그룹 음성 통화 참여
그룹 음성 통화에 참여하려면 다음 인자와 함께 PlanetKitManager
의 joinConference()
를 호출하세요.
- 아래 속성을 포함하는
PlanetKitJoinConferenceParam
객체myUserId
: 로컬 사용자의 사용자 IDroomId
: 방 IDmyServiceId
: 로컬 사용자의 서비스 IDroomServiceId
: 방의 서비스 IDaccessToken
: 액세스 토큰
- 이벤트 콜백이 구현된
PlanetKitConferenceEventHandler
객체
Future<bool> joinConference(String roomId, String accessToken) async {
var builder = PlanetKitJoinConferenceParamBuilder()
.setMyUserId(myUserId)
.setMyServiceId(myServiceId)
.setRoomServiceId(roomServiceId)
.setRoomId(roomId)
.setAccessToken(accessToken);
PlanetKitJoinConferenceParam? param;
try {
param = builder.build();
} catch (error) {
print("failed to build join conference param $error");
return false;
}
final result =
await PlanetKitManager.instance.joinConference(param, _eventHandler);
if (result.reason != PlanetKitStartFailReason.none) {
print("join conference result ${result.reason}");
return false;
}
// The "result.conference" instance is the main instance to call APIs from now on.
// You must keep it to control this call.
return true;
}
final _eventHandler = PlanetKitConferenceEventHandler(
onConnected: (conference) => print("connected"),
onDisconnected: (conference, reason, source, byRemote) => print("disconnected $reason"),
onPeerListUpdated: (conference, updateParam) => print("peer list updated $updateParam"));
사용자가 클라이언트 앱에서 그룹 통화 방에 입장하려면 방 ID가 필요하므로, 애플리케이션에서 정의한 통신 채널을 통해 방 ID를 다른 사용자와 공유해야 합니다.
다음 단계
아래 문서를 참조해 PlanetKit에서 제공하는 다양한 기능과 각 기능의 사용 방법을 자세히 살펴보세요.