티스토리 뷰

반응형

1. 내 프로젝트를 파이어베이스에 등록(이미 등록했다면 생략)


먼저 구글 파이어베이스 홈페이지를 들어간 후


다음 사이트 또는 파이어베이스 공식 가이드를 참고하여 내 프로젝트 파일을 파이어베이스에 등록한다.


등록을 마쳤으면, 실시간 데이터베이스를 등록해야 한다.





2. 파이어베이스 실시간 데이터베이스 등록 및 권한설정


먼저, Gradle에 다음과 같이 파이어베이스 데이터베이스와 관련된 의존성을 추가한다.


implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-database:16.0.1'

이제, 구글 공식 홈페이지를 참조하여 파이어베이스 데이터베이스를 직접 등록하거나, 안드로이드 스튜디오 내에서 Firebase Assistant를 사용하여 간단하게 등록하자.


안드로이드 스튜디오 Tools -> Firebase를 클릭하면 옆에 Assistant  탭이 뜬다.


Realtime Database를 클릭하고, Set up Realtime Database를 클릭하면 순서대로 데이터베이스를 등록하는 메뉴가 뜬다.


1번과 2번을 진행하여 자동으로 Gradle에 설정하도록 하고, 3번인 인증을 진행하도록 하자.


우린 아직 Google Authentication을 하지 않았기 때문에 데이터베이스를 공개로 전환해야 한다.


자신의 프로젝트의 파이어베이스 데이터베이스로 이동한 후, 상단에 Realtime Database로 되어있는지 확인하자(Cloud FireStore로 되어있으면 바꿔주자.)


'규칙' 탭으로 이동후, 


{
 
"rules": {
   
".read": "auth != null",
   
".write": "auth != null"
 
}
}


다음을


{
 
"rules": {
   
".read": true,
   
".write": true
 
}
}


으로 바꿔줘 공개로 바꾸어 준다.


이제 파이어베이스 데이터베이스 등록 과정은 끝났다.





3. 파이어베이스를 통해 WebRTC 시험해보기


먼저 샘플앱에 없는 FirebaseRTCClient.java 파일을 다운 받는다.


FirebaseRTCClient.java


다음 소스를 프로젝트에 넣고, CallActivity 부분을 다음과 같이 약간 수정해준다.

    if (loopback || !DirectRTCClient.IP_PATTERN.matcher(roomId).matches()) {
      appRtcClient = new WebSocketRTCClient(this);
    } else {
      Log.i(TAG, "Using DirectRTCClient because room name looks like an IP.");
      appRtcClient = new DirectRTCClient(this);
    }

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

if("firebase".equals(roomId)) {
appRtcClient = new FirebaseRTCClient(this);
} else if (loopback || !DirectRTCClient.IP_PATTERN.matcher(roomId).matches()) {
appRtcClient = new WebSocketRTCClient(this);
} else {
Log.i(TAG, "Using DirectRTCClient because room name looks like an IP.");
appRtcClient = new DirectRTCClient(this);
}


앱을 실행한 후 방 이름창에 firebase라고 입력하고 연결 버튼을 누른다.

(절대로 방이름이 firebase가 아니다. FirebaseRTCClient 객체를 생성하기 위한 수단일 뿐이다.)


연결이 되었으면, 파이어베이스 Reatime-Database(실시간 데이터베이스)에서 icecandidate와 sdp가 생성된 것을 확인한다.


마찬가지로 다른 단말기로 firebase를 입력하여 1:1 영상통화가 진행되는지 시험해본다.




(firebase 란 채널에서 단말기 2개(15444c927d03, NB1GAD2790200558)가 영상통화를 진행중인 상태)


※채널 이름은 코드상에서 내 맘대로 바꿀 수 있음. 단말기의 ID는 Build.SERIAL 함수를 통해 만들어진 임의의 문자.







4. ETC...


firebase를 이용한 영상통화 방법은 코드를 살펴보면 알겠지만, 크게 특별한 것이 없다.


기본적으로 TCPClient를 생성하는 것과 다를 것이 없으며, 다만 구글서버의 STUN과 TURN서버를 가져와 웹처럼 사용하는 것 뿐이다.


또한, 파이어베이스 실시간 데이터베이스에서는 생성된 ICE Candidate와 sdp를 피어의 ID를 사용하여 관리하는 것이 전부이다.

(SDP에 대해 공부하고 싶으면 여기로)


데이터베이스의 channels의 child에 있는 firebase 부분을 해당 유저의 아이디로 바꾸면 손쉽게 1:1 영상채팅을 구현할 수 있을 것이다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함