본문 바로가기
앱인벤터/실전 앱

앱인벤터 채팅앱 만들기 #1 (채팅방 만들기 및 들어가기)

by 이지이지(EGEasy) 2021. 11. 24.

앱인벤터로 만든 채팅앱 화면

 

안녕하세요. 이지이지입니다.

이번 앱인벤터 포스팅에서는 채팅앱을 만들어 볼텐데요...

 

두 개의 포스팅으로 나누어져 있으며,  

첫 번째 포스팅에서는 Screen1을, 두 번째 포스팅에서는 Screen_Chat를 완성합니다.

 

Screen1은 채팅방 만들기 또는 개설된 채팅방에 입장하기 등 기본적인 채팅 설정에 대한 스크린이며,

Screen2는 실제 채팅을 통해 메시지를 주고 받는 스크린입니다.

 

본 예제 앱을 통해 여러분은

1. FirebaseDB

2. ListView에 대한 이해를 할 수 있습니다.

 

화면 구성 및 블록 코딩은 다음 소스 파일을 내려받아 참고하시기 바랍니다.

 

EG_CHAT.aia
0.01MB

 

 

    사전 준비 (파이어베이스 프로젝트 만들기)

본 예제 앱에서는 메시지를 저장하고, 불러오기 위해서 파이어베이스Realtime Database를 이용합니다.

파이어베이스 프로젝트 만들기는 이전 포스팅에서 자세히 설명하였으니, 이전 포스팅을 참고하시기 바랍니다.

 

 

 

 

 

 

 

 

앱인벤터 강좌 #3 파이어베이스(Firebase)

안녕하세요. 이지이지입니다. 이번 포스팅에서는 앱인벤터에서 데이터베이스 사용을 위한 파이어베이스 컴포넌트에 대해 알아보도록 하겠습니다. 파이어베이스는 아직 실험실(Experimental)에 있

egeasy.tistory.com

 

위의 강좌를 보고 프로젝트를 만드시고,

예제 앱에서 사용할 다음 두 가지 항목을 메모장 같은 곳에 기록해두시기 바랍니다.

 

1. 웹 API키

2. Realtime Database URL주소

 

그리고

3. Realtime Database의 규칙 설정에서 read와 write 권한을 모두 꼭 true로 설정해두시기 바랍니다.

(위의 링크된 포스팅에 설명 되어 있습니다.)

 

 

    화면 구성

 

Screen1의 화면 구성

 

Screen1은 기본적인 채팅방 설정에 관환 화면입니다.

화면 구성에 있어 특별한 사항은 없으나,

단 FirebaseDB 컴포넌트의 속성 중 다음 두 가지 사항 입력에 주의하시기 바랍니다.

(사전 준비 단계에서 메모해 두었던 부분을 입력합니다.)

 

1. FirebaseToken: 파이어베이스 프로젝트의 웹 API키

2. FirebaseURL: 파이어베이스 Realtime Database URL 

 

- 채팅룸: 채팅방의 이름으로 사용할 내용을 입력합니다.

- 비밀번호: 방을 개설하는 사용자의 경우에는 자신이 원하는 비밀번호를 입력하면 되고,

개설된 채팅방으로 참여할 사용자는 개설자가 설정한 비밀번호를 입력합니다.

- 닉네임: 채팅방에서 사용할 사용자의 닉네임입니다. 

 

 

    블록 코딩

 

블록 코딩에 앞서 파이어베이스 Realtime Database의 사용에 대해 간단히 언급만 하고 가겠습니다.

더 자세한 사항은 사전 준비 부분의 링크된 이전 포스팅을 참고하시기 바랍니다.

 

앱인벤터에서 Realtime Database를 이용할 때, 반드시 알아야 할 개념은 ProjectBucket, tag, value입니다.

ProjectBucket, tag, value는 정해져 있는 것이 아니라 변경할 수 있으며, ProjectBucket에 따라 tag가 달라지게 됩니다.

 

- ProjectBucket: 데이터베이스의 여러 항목(경로) 중, 실제 데이터를 읽고 쓰고 할 항목의 한 수준 상위 디렉토리

- tag: ProjectBucket의 한 수준 하위 항목

- value: tag에 저장되어 있는 값

 

이 개념을 좀 더 쉽게 영한사전을 예로 들어 비유하자면,

- ProjectBucket: 사전 200페이지

- tag: 사전 200페이지에 있는 영어 단어들(ex. cat, cookie, corn ...)

- value: tag에 대응되는 한글 뜻(ex. 고양이, 쿠키, 옥수수 ...)

 

본 앱에서 사용한 Realtime Database의 구조는 다음과 같습니다.

 

데이터베이스 구조

 

CHAT_1과 CHAT_2는 채팅방 이름으로 사용되었습니다.

password는 채팅방의 비밀번호입니다.

이름은 사용자가 입력한 닉네임이고 이름 옆에는 리스트 형식으로 채팅 메시지를 저장합니다.

 

만약 ProjectBucket을 ChatRoom/CHAT_1으로 설정한다면,

tag는 password, 김유신, 이순신이 되며

value는 1234, 김유신 채팅 메시지, 이순신 채팅 메시지가 됩니다.

 

이제 어느 정도 개념이 잡히셨다면, 블록 코딩을 살펴보도록 하겠습니다.

 


먼저 전체 블록 코딩입니다. 

 

전체 블록 코딩

 


 

[시작하기] 버튼(btn_Start)을 클릭했을 때 실행되는 블록입니다.

 

[시작하기] 버튼을 클릭했을 때 실행되는 블록

 

① [시작하기] 버튼(btn_Start)을 클릭했을 때,

 

② 만약 txt_Chatroom 또는 txt_Password 또는 txt_Nickname이 공백이라면, => (true면 3번, false면 4번으로)

→ 필요한 정보가 최소한 하나는 빠진 것입니다. 

 

③ 대화상자를 통해 정보가 부족하다는 메시지를 보여줍니다.

 

④ firebase_Chatroom의 ProjectBucket을 ChatRoom/txt_Chatroom.Text(사용자가 입력한 채팅방 이름)으로 설정합니다.

기존에 경로가 존재하고 있지 않다면 새로 생성됩니다.

 

⑤ 파이어베이스 데이터베이스로부터 tag가 password인 것의 값(value)을 가져옵니다. 

→ 만약 password란 tag가 없다면, 그 채팅방이 개설되어 있지 않았다는 것을 의미하므로 값으로 noRoom을 받도록 설정하였습니다.

 

⑥ [시작하기] 버튼을 눌렀다는 것은 모든 정보의 입력이 끝이 났다는 것이므로, 가장 늦게 입력했을 가능성이 높은txt_Nickname을 입력할 때 나타난 키보드를 숨깁니다.

→ txt_Chatroom, txt_Password를 가장 늦게 입력하였을 가능성도 있으니, HideKeyboard를 더 추가하여도 됩니다.

 

 


 

다음은 데이터베이스로부터 값을 전달받았을 때, 실행되는 블록입니다. 위에서 다음 블록으로 값을 가져오라는 명령을 한 후 실제 값을 받게되면 실행되는 것입니다.

 

 

 

 

 

 

데이터베이스에서 값을 가져오게 하는 명령 블록

 

데이터베이스로부터 값을 받았을 때 실행되는 블록

 

① 데이터베이스로부터 값을 받았을 때

 

② 만약 받은 값(value)이 "noRoom"이라면 => (true면 3번으로, false면 6번으로)

→ password라는 tag가 없는 것이므로, 아직 사용자가 입력한 이름으로 개설된 채팅방이 없다는 의미입니다. (3번과 연결)

 

③ tag는 "password"로, tag에 대응하는 값으로 txt_Password.Text를 저장합니다.

 

④ TinyDB1에 사용자의 닉네임을 저장해둡니다. (Screen2에서 사용할 것입니다.)

 

⑤ 이제 방 개설이 끝났으므로, 실제 채팅 메시지가 오가는 Screen_Chat를 열어줍니다. 이 때 txt_Chatroom.Text(채팅방 이름)을 Screen_Chat로 startValue를 통해 전달합니다.

→ 타이니DB에 저장해 두어도 될 것입니다.

 

 


이상으로 채팅방 개설 등 채팅을 시작하기 위한 준비과정이 모두 끝났습니다.

다음 포스팅에서 실제 채팅 메시지가 오가는 화면을 완성해보도록 하겠습니다.~~~

 

댓글