Firebase Auth 와 Realtime Database

2020. 12. 9. 15:38 안드로이드/개발 TIP

이번에 급식앱을 만들면서 버전관리를 해야할 필요성을 느꼈는데요.

기존의 버전관리는 단순히 playstore에 등록이 되면 그 정보를 가져다 파싱하여 업데이트 비교를 하곤했습니다.

여기서 문제가 캐시때문에 실제 서버에 반영되어 가져온 정보와 사용자가 보는 정보가 다르다는 것입니다.

 

즉, 플레이스토어에는 업데이트버전이 올라가있지만 사용자는 캐시때문에 구버전이 보여 업데이트가 이루어지지 않는다는 점입니다.

그래서 서버에서 버전정보를 받아와 업데이트를 해주는게 더 낫다고 판단하여 구현을 생각하게 되었는데 

단지 버전관리만을 위해서 서버를 임대한다는 건 500원이라도 낭비라고 생각했습니다.

 

그래서 알아보던 중 Firebase의 Realtime Database를 써보기로 했습니다.

 

 

 

Firebase는 이전에 통계를 붙이기 위해 Analytics를 이용해본 경험이 있기 때문에 사전 작업은 필요가 없었죠.

 

프로젝트 생성등의 사전작업은 다음을 참고해주세요 

http://akaisun.tistory.com/24

 

 

 

* DataBase와 Auth는 상호적인 부분도 있고 Auth없이 DataBase만 이용가능 하기도합니다. 

단지 설명을 위해 써놓은 것이므로 Database의 활용 부분만 원하시면 스크롤을 아래로 좀 더 당겨주세요.

 

일단 firebase에 접속하셔서 해당 프로젝트로 이동하신다음 auth를 선택해서 활성화 시킵니다.

저는 이미 anonymous를 활성화 시켰습니다.

 

 

 

 

 

로그인 방법쪽으로 이동하시면 다양한 SNS계정과 이메일을 활용하실 수 있습니다.

 

간편하게 사용설정을 ON / OFF 하시면됩니다.

 

 

 

 

이메일을 이용해 가입을 한다면 이 사람이 진짜 본인인지 확인절차를 거쳐야 하는데 

이런 인증 관련도 firebase에서 지원을 해주고 있었습니다.

 

 

 

다음으로 database입니다.  데이터베이스는 비정형구조로 되어있습니다.

 

보통 몽고등을 이용해보셨다면 파악하는데 수월하실거에요.

 

자세히보면 이부분은 json의 형태와도 같습니다.

 

저는 버전관리를 위해 아래와 같이 데이터 구조를 만들었습니다.

 

 

 

그리고 데이터에 접근하기 위한 rule을 설정해주셔야 하는데요.

 

읽는건 누구나 접근할 수 있도록 다음과 같이 설정하였습니다.

 

 

 

시뮬레이터를 돌려보면 인증됨에 체크를 하지 않았음에도 read가 허용된 걸 테스트할 수 있습니다.

 

 

 

이제 웹에서의 설정은 끝났고 앱에서의 설정은 어떻게하는지 알아보겠습니다..

 

저는 앱에서는 단지 버전관리를 위함이기 때문에 auth관련 부분을 넣지 않고 DataBase만 이용했습니다.

 

 

databaase docment의 주소입니다.

 

https://firebase.google.com/docs/database/android/start/

 

auth document의 주소입니다

 

https://firebase.google.com/docs/auth/android/anonymous-auth

 

 

 

 

 

 

gradle에 다음을 추가하세요.

 

compile 'com.google.firebase:firebase-database:9.0.2'

 

build후에 

 

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("version");

DB가 변경될 때마다 값을 받아오는 listener를 달아줍니다

 

private ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String newVersion = dataSnapshot.getValue(String.class);
        String curVersion = VersionManager.getAppVersionName(activity);
        VersionManager.checkVer(activity, curVersion, newVersion);
        VersionManager.setNewVersionName(newVersion);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
};

 

realtime database의 특징이 위의 리스너를 달아주면 값이 변경될 때마다 실시간으로 반응한다는 것인데요

 

저같은 경우는 activity 화면에서 내렸을 때에도 반응이 와서 dialog가 죽는 현상이 발생했습니다.

 

그래서 onResume과 onStop부분에 리스너를 붙이고 떼는 작업을 한번 더 수행했습니다.

 

@Override
protected void onResume() {
    super.onResume();
    myRef.addValueEventListener(valueEventListener);
}

@Override
protected void onStop() {
    super.onStop();
    myRef.removeEventListener(valueEventListener);
}

 

 

여기까지 제가 app update를 위해 버전관리의 필요성을 느끼면서 작업을 했던 내용들입니다.

단지 간단한 용도로만 쓰인다면 firebase도 나쁘지 않고 성능또한 우수했습니다.

 

firebase는 일정 부분에 한해서 무료로 지원되며 그 이상을 원하면 월정액 또는 쓴만큼 과금되는 형태가 있습니다.

각자 사용량에 맞게 선택해서 쓰시면 되겠습니다.

 

 

도움이 되셨다면 공감 꾹 ~ !

 

모두 해피한 개발하세요~


출처: https://akaisun.tistory.com/25?category=622886 [아카이의 개발창고]