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

안드로이드 스튜디오 파이어베이스 로그인 정보 가져오기 질문드려요

0 추천

안드로이드 소스를 가지고 공부중인 초보입니다..

앱의 형태는 먼저 아이디,비밀번호,이메일을 생성해서 로그인을 합니다.

그후에 파이어베이스 데이터베이스에서 문제를 가져와서 퀴즈게임을 해서

유저의 점수와 랭킹이 파이어베이스에 저장이 되는 형태입니다..

 

위 앱에서 로그인 방식을 구글과 페이스북 두가지로 바꾸는 작업을 하고 있습니다..

구글과 페이스북으로 로그인을 하면 파이어베이스의 authentication 사용자에는 등록이 됩니다.

여기서 유저데이터를 파이어베이스 데이터베이스와 연동하는 부분에서 어려움을 겪고 있습니다..

Model이라는 패키지에 Category,Question,QuestionScore,Ranking,User 이렇게 클래스가 만들어져 있는데

여기에서 User 클래스를 수정하면 되는건가요?

데이터가 정상적으로 저장되게 할려면 어떻게 해야하나요?

일단 기존의 User 클래스의 내용은 이렇습니다..

public class User {
    private String user;

    public User() {
    }

    public User(String user) {
        this.user = user;

    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }
}

 

그리고 Common이라는 클래스에는 아래와 같이 되어있구요..

public class Common {
    public static String categoryId,categoryName;
    public static User user;
    public static List<Question> questionList = new ArrayList<>();

    public static final String STR_PUSH = "pushNotification";
}

 

그다음 게임결과와 점수 랭킹 등에서 유저를 가져와서 쓰고 있습니다..

 

아래는 파이어베이스 데이터베이스의 데이터와 규칙입니다..

 

{
  "rules": {
    ".read": "true",
    ".write": "true",
      "Question_Score":{
        ".indexOn":["user"]
      },
        "Ranking":{
          ".indexOn":["score"],
          "Question":
          {
            ".indexOn":["categoryId"]
          }
        }
  }
}

 

 

 

애니타임 (550 포인트) 님이 2017년 12월 7일 질문

1개의 답변

0 추천
 
채택된 답변

https://firebase.google.com/docs/database/android/read-and-write

여기에 보시면 기본적인 read, write 방법이 나와있습니다.

룰은 보통 read는 크게 상관없을것 같고 쓰기는 request.auth != null 일때만 쓰기허용으로 하면 보안에 더 좋게 되겠죠

Authentication과 DB를 같이 쓰려면 제가 예전에 경험한바로는 Authentication에서 받아오는 Token 값을 키값으로 해서 DB에 유저정보를 직접 생성해야 유저정보를 쌓을수 있다고 알고있습니다.

그리고 DB를 읽을때는 child(경로)로 한번에 접근하기도 한단계씩 접근하는것도 가능합니다.

 

아래 예제는 제가 ReactNative로 구현했을때 내용이라 Android에 맞는 API로 수정하셔야 합니다. 예를 들어서 한거라..

firebase.database().ref().child("접근하고싶은 DB경로").once('value', function(snapshot) {}

 

만약에 child("Users") 로 조회하면 snapshot에 DB의 Users에 있는 데이터를 전부다 가져옵니다.

캬옹이 (37,920 포인트) 님이 2017년 12월 7일 답변
애니타임님이 2017년 12월 7일 채택됨
감사합니다 캬옹이님.. 열심히 공부해보겠습니다..
...