NOW OR NEVER

[Android] FireBase 기본 설정 & CRUD 본문

Android

[Android] FireBase 기본 설정 & CRUD

LAURA 2023. 7. 31. 14:20
반응형

Firebase

  • 안드로이드 연동 쉬움
  • 어플리케이션 기능 구현에 집중할 수 있다

Cloud Storage(=Storage)

  • 파일을 저장하기 위한 용도
  • 사진 등을 올려놓고 사용할 수 있다.

Firebase 초기 설정

 

로그인 - Google 계정

이메일 또는 휴대전화

accounts.google.com

  • 3. 프로젝트 만들기 : 프로젝트 이름 입력 후 기본으로 되어 있는 설정 그대로 계속 눌러서 생성
  • 4. 안드로이드 아이콘 클릭

  • 5. 앱 관련 사항 작성
    • SHA-1 필요한 경우에만 입력(API 추가할 때 필요할 때 입력 요한다고 함 그때 가서 해도 됨)

  • 6. google-service.json 다운로드 후 해당 설명 따라하기

앱 프로젝트 보는 기준을 Android - > project 수준으로 변경 후 app 폴더에 해당 파일 추가

  • 7. 안드로이드 스튜디오에서 project 수준의 build.gradle 파일 plugins 블럭에 아래 코드 추가 후 sync now(버전이 변경 될 수 있으니 firebase 사이트 참고해서 하기)  
  • 8. 안드로이드 스튜디오에서 app 수준의 build.gradle 파일 각 블럭에 맞게 아래 코드 추가 후 sync now(버전이 변경 될 수 있으니 firebase 사이트 참고해서 하기)  
plugins {
  id("com.android.application")
  id("com.google.gms.google-services")

}

dependencies {
  implementation(platform("com.google.firebase:firebase-bom:32.2.0"))
  implementation("com.google.firebase:firebase-analytics-ktx")

}

 

RealTime Database

  • 데이터 저장하기 위한 용도
  • 데이터를 저장하고 읽어올 수 있는 실시간 데이터베이스 서비스
  • json 구조 기반의 NoSQL 제품 
    • 처리 속도가 빠르다
    • 저장되는 데이터의 용량이 작다

기본 설정

  • 1. realTimd Database에 들어가 데이터베이스 만들기 클릭
  • 2. 데이터 베이스 설정 : 보안 규칙은 테스트 모드로 설정
  • 3. 안드로이드 스튜디오 프로젝트에서 app 수준의 build.gradle의 dependencies 블록 안에 아래 코드 추가
implementation("com.google.firebase:firebase-database:20.2.2")

 

데이터 타입

  • Task : 테이블 하위 모두
  • <DataSnapShot> : 드래그 하나 뜻함

  • Task<DataSnapShot> : 테이블 하위 모두 snapshot 

 

 

데이터 저장하는  방법

  • 1. data를 담을 data class를 만든다.
// 데이터 클래스
data class TestDataClass(var data1:Int, var data2:String, var data3:Boolean)
  • 2. 해당 클래스로 객체를 만든다
val t1 = TestDataClass(100, "문자열1", true)
  • 3. firebase 객체를 만든다.
val database = FirebaseDatabase.getInstance()
  • 4. 테이블에 접근한다(해당 테이블이 없으면 만들어지고 있으면 접근한다.)
// TestData에 접근한다.
val testDataRef = database.getReference("TestData")
  • 5. 해당 테이블에 데이터를 저장한다.
// 저장한다.
testDataRef.push().setValue(t1)

 

데이터 전부 가져오는 방법

// 네트워크 관련 코드라 thread 사용
thread {
    // firebase 객체를 생성한다.
    val database = FirebaseDatabase.getInstance()
    // TestData에 접근한다.
    val testDataRef = database.getReference("TestData")

    // 전부를 가져온다.
    testDataRef.get().addOnCompleteListener{
        textView.text = ""
        // 가져온 데이터의 수 만큼 반복한다.
        for(a1 in it.result.children){

            // 데이터를 가져온다.
            val data1 = a1.child("data1").value as Long
            val data2 = a1.child("data2").value as String
            val data3 = a1.child("data3").value as Boolean

            textView.append("data1 : ${data1}\n")
            textView.append("data2 : ${data2}\n")
            textView.append("data3 : ${data3}\n\n")
        }
    }
}

 

데이터를 조건에 맞게 가져오는 방법

  • get() 은 반드시 마지막에 나와야 한다 : 서버로부터 조건에 맞는 것들만 가져오기 위해서는 그렇게 해야 한다. 그렇지 않으면 불필요한 데이터들도 가져와 서버와 클라이언트에 부담을 줄 수 있다.
  • orderByChild("객체 안 데이터이름") : firebase객체.getReference("테이블 이름")으로 가져온 관리하는 객체들이 가지고 있는 입력한 데이터 이름의 값을 가져온다.
  • 특정 이름의 값을 데이터를 검색하려면 firebase database의 규칙에 .indexOn 설정 : 아래 예시는 TestData 내에서 data1으로 검색 허용함

  • 조건 설정
    • 값 입력 시 firebase의 경우 int 값 같은 것이 없으므로 소수점도 같이 입력해줘야 한다.
    • equalTo(값) : 괄호 안 값과 동일 한 것들 추출
    • endAt(값): 지정한 값보다 작거나 같은 것
    • endBefore(값) : 지정한 값보다 작은 것
    • startAt(값): 지정한 값보다 크거나 같은 것
    • startAfter(값) : 지정한 값보다 큰 것
// firebase 객체를 생성한다.
val database = FirebaseDatabase.getInstance()
// TestData에 접근한다.
val testDataRef = database.getReference("TestData")

// data1이 200인 것만 가져온다.
testDataRef.orderByChild("data1").equalTo(200.0).get().addOnCompleteListener {
    textView.text = ""
    // 가져온 데이터의 수 만큼 반복한다.
    for(a1 in it.result.children){

        // 데이터를 가져온다.
        val data1 = a1.child("data1").value as Long
        val data2 = a1.child("data2").value as String
        val data3 = a1.child("data3").value as Boolean

        textView.append("data1 : ${data1}\n")
        textView.append("data2 : ${data2}\n")
        textView.append("data3 : ${data3}\n\n")
    }
}

 

데이터 수정하는 방법

  • 데이터를 변경하려면 .ref를 써야 만 한다.
val database = FirebaseDatabase.getInstance()
val testDataRef = database.getReference("TestData")

// data1이 100인 데이터를 가져온다.
testDataRef.orderByChild("data1").equalTo(100.0).get().addOnCompleteListener {
    for(a1 in it.result.children){
        // data2에 새로운 문자열을 설정한다.
        a1.ref.child("data2").setValue("새로운 문자열")
    }
}

 

데이터 삭제하는 방법

val database = FirebaseDatabase.getInstance()
val testDataRef = database.getReference("TestData")

// data1이 100인 데이터를 가져온다.
testDataRef.orderByChild("data1").equalTo(100.0).get().addOnCompleteListener {
    for(a1 in it.result.children){
        // 해당 데이터를 삭제한다.
        a1.ref.removeValue()
    }
}

 

 


ETC

  • No matching client found for package name '~~~' 이런 식으로 에러나면 google-services.json 파일 내 client 블럭 안 package name이 현재 나의 프로젝트 패키지명과 일치하는 지 확인
  • firebase는 값을 가져올 때 long 값으로 가져온다.
  • 참고하면 좋은 링크 : https://lcw126.tistory.com/103
Comments