본문 바로가기
프로젝트 정리/근거리 채팅

근거리 채팅 서비스 개발하기 (1) - 프로젝트 ssid 가져올 수 없는 문제

반응형

이전 프로젝트 설계

원래 개발하려고 한 내용은 다음과 같습니다.

1. 기기마다 고유로 가지고 있는 Device Id를 가져오고 회원가입 없이 닉네임을 만들어 채팅을 사용한다.

2. 리액트 네이티브 앱에서 사용자가 wifi로 연결이 되어있으면 해당 SSID를 서버에 저장하고 채팅방을 만들어 소켓에 연결한다.

3. 사용자가 어플을 종료하게 되면 FCM으로 채팅방에 해당하는 새로운 알람을 전송해준다.

4. 사용자가 어플을 종료했다가 다시 어플을 켰을 때 이전 채팅 기록을 서버에서 전송해주고 소켓을 다시 연결한다.

 

큰 틀은 이렇게 잡고 개발 중 문제가 생겼습니다.

 

프로젝트 문제점

Device ID 보안 이슈

원래 회원가입 없이 이용할 수 있는 서비스를 제공하기 위해 Device Id를 이용하려고 했지만 사용자에게 고지 없이 Device ID를 가져와 이용하게 된다면 보안에 위반되어 앱을 등록할 수 없습니다. 또한 사용자한테 알려주고 이용하더라도 서버에 저장하는 행동이 문제가 생길 가능성이 있습니다.

해결 방법 

개발 중인 앱을 테스트 할 때는 Device 아이디를 이용해 개발하다가 나중에 회원 기능을 추가해 서비스를 제공하려고 합니다.

SSID 를 가져올 수 없음

안드로이드와 아이폰에서 위치 권한을 이용해 모두 SSID에 접근하고 react-native-reborn, react-native-netInfo 를 이용해 SSID를 가져올 수는 있습니다.

아이폰 같은 경우 SSID를 가져오기 위해서는 Xcode 에서 capabilities 기능 중 access WIFI Information 를 추가해야 합니다. 하지만 이 기능을 사용하기 위해서는 apple developer 등록을 해야하는데 유료 서비스이고 99달러로 등록해야 합니다. 

안드로이드에서는 무료로 가져올 수 있으나 에뮬레이터 API33 버전에서는 잘 동작하지만 Android 10 API29 인 공기계에서는 정상적으로 동작하지 않았습니다. 따라서 SSID를 이용해 채팅방을 만들어 주는 서비스에서 큰 문제가 발생할 가능성이 있어 SSID를 사용하지 않기로 하였습니다.

해결방법

같은 와이파이의 채팅방을 만들려고 했으나 위 같은 문제가 발생해 위치에 기반하여 범위를 설정해 사용자가 직접 채팅방을 개설하고 위치를 벗어날 경우 채팅방이 나가지도록 만들 예정입니다.

중복 SSID

이것은 SSID로 채팅방을 개설했을 때 발생할 수 있는 문제점입니다. SSID가 똑같고 위치가 가까운 경우 한 채팅방에 모이게 되는 문제가 발생할 수 있습니다. 하지만 SSID를 가지고 프로젝트를 진행하지 않을 것이기 때문에 문제가 되지 않는 부분입니다.

 

 

현재 프로젝트 설계

1. Device Id를 이용해 닉네임을 설정하고 서버에 저장합니다. (차후 회원가입 기능을 도입해 Device Id 를 이용하지 않을 예정)

2. 어플을 실행하거나 종료했더라고 백그라운드 서비스로 location 정보가 변경될 때마다 업데이트한다.

3. 어플 사용자가 채팅방을 개설할 경우 자기 위치에서 범위를 설정한다. 예) 반경 5,10,15,20m.. 등등

4. 사용자가 채팅방 반경안에 있을 경우 채팅방이 보이게 되고 입장할 수 있다.

5. 사용자가 어플을 종료하게 되면 FCM으로 채팅방에 해당하는 새로운 알람을 전송해준다.

6. 사용자가 어플을 종료했다가 다시 어플을 켰을 때 이전 채팅 기록을 서버에서 전송해주고 소켓을 다시 연결한다.

7. 사용자가 백그라운드 상태에서나 포그라운드 상태에서 채팅방 반경에 벗어난 경우 자동으로 채팅방에 나가지고 FCM 알람을 보내지 않도록 설정한다.

 

프로젝트 계획 

현재 디바이스 아이디와 location 정보를 가져와 위치가 바뀌면 위치정보를 업데이트 하도록 설정하였습니다.

디바이스 아이디를 서버에 전송해 닉네임을 설정한 후 스프링 부트를 이용해 소켓 서비스를 리액트 네이티브와 연동하고 채팅방을 개설해 대화하는 것 까지 일단 다음포스터에서 올릴 예정입니다.

그 다음 location에 해당하는 서비스 (범위 채팅방 개설, 위치가 채팅방 범위에 없으면 소켓에서 해당 룸에 접속 불가)의 기능을 추가할 예정입니다.

그리고 추후 프로젝트에서 위치에 기반한 채팅서비스뿐 만 아니라 카카오톡 처럼 친구 채팅 기능을 추가하고 주변 사람 추천 친구 기능, 접속중인 사람 보기 기능을 추가할 예정입니다.

device ID , Location

 

 

 

개발하는 모든 소스코드는 깃허브에 등록하고 블로그에 정리해서 프로젝트 진행 사항을 올릴 예정입니다.

 

https://github.com/dkekzhs/nearChatProejct/

 

dkekzhs/nearChatProejct

와이파이를 이용한 근거리 채팅 서비스 . Contribute to dkekzhs/nearChatProejct development by creating an account on GitHub.

github.com