마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 파이어베이스 이메일 인증과 관련한 질문입니다.

0 추천

유저가 이메일로 가입했을 경우, 두 가지 케이스로 나누고 싶습니다.

  1. 최초 로그인할 경우 -> InputInfoActivity로 이동
  2. 최초 로그인이 아닌 경우 -> MainActivity로 이동

최초 로그인 시에 파이어베이스 데이터베이스에는 유저 정보가 없습니다. 이를 활용해 유저의 uid노드가 데이터 베이스에 없으면 최초 로그인으로 구분하려하는데요.

uid노드가 있는지 없는지 데이터 베이스에서 긁어오고, boolean값을 변경해줍니다. (코드참조) 헌데 onDataChanged 메서드에서는 boolean값이 변경이되는데 ValueEventListener를 빠져나오면 다시 false로 바뀌어 있네요. 왜 이런건지 궁금하고 해결책이 궁금합니다.

이메일 인증을 최초 로그인으로 구분하는 또다른 해결책을 제시해 주시면 더욱 감사합니다.

 

firstEmailLogin이 전역변수 boolean 값입니다. firstEmailLogin이 true로 설정되어 있으면 1번의 경우로 실행이 되고 false이면 2번의 경우로 갑니다. 당연히 데이터 베이스에 유저 정보를 넣지 않았기 때문에 dataSnapshot.getValue()는 null 값으로 로그가 찍힙니다.

준버기 (1,160 포인트) 님이 2018년 4월 17일 질문

1개의 답변

0 추천

기간이 많이 지나서 도움이 될지는 모르겠지만 남겨드려요.

1. 파이어베이스에서 리스너3종(데이터베이스에서 값을 가져오기 위해 쓰는)의 경우 getValue를 통해 가져온 값은 리스너 내에서만 유효한 형태로 전역변수로 해서 받으시면 null값이 뜹니다. 그래서 지역변수로 쓰시거나 콜백형태로 쓰셔야 값을 받아올수있습니다. 그 이유가 파이어베이스는 비동기 형식이라 그렇다고 합니다. 콜백 인터페이스 구현은 검색해보시면 많이 나오더라구요.

2. 저도 파이어베이스를 이용해 채팅앱을 만들때 신규가입시 아이디 중복확인을 위해 고민을 했었는데요, dataSnapshot.exists() 메소드는 데이터베이스 참조하는 부분에 해당 값이 존재하는지 아닌지를 구분하는 함수인데 이것을 이용하시면 되지않을까 생각됩니다.

=>저같은 경우
users노드 - UID노드 - email을 포함한 유저정보들    형태의 구조인데

Query query = DB참조경로.orderByChild("email).equalTo(입력값);

query.addListenerForSingleValueEvent(new ValueEventListener(){

  @override

   public void onDataChange(DataSnapshot datasnapshot){

       boolean eamilIsExist = datasnapshot.exsists();

       if(eamilIsExist){

          Toast.makeText(getApplicationContext(), "이미 존재하는 이메일입니다",Toast.LENGTH_SHORT).show();

       } 

   }

}

이런방법으로 중복체크를 하였습니다. 도움이 되길 바랍니다 ~!

idontknow (6,380 포인트) 님이 2018년 6월 12일 답변
idontknow님이 2018년 6월 12일 수정
...