반응형
Notice
Recent Posts
Recent Comments
Link
NOW OR NEVER
[Android] FireBase 기본 설정 & CRUD 본문
반응형
Firebase
- 안드로이드 연동 쉬움
- 어플리케이션 기능 구현에 집중할 수 있다
Cloud Storage(=Storage)
- 파일을 저장하기 위한 용도
- 사진 등을 올려놓고 사용할 수 있다.
Firebase 초기 설정
- 프로젝트가 바뀔 때마다 설정해줘야 한다.
- 1. 프로젝트 생성
- 2. FireBase console 접속 : https://console.firebase.google.com/
로그인 - Google 계정
이메일 또는 휴대전화
accounts.google.com
- 3. 프로젝트 만들기 : 프로젝트 이름 입력 후 기본으로 되어 있는 설정 그대로 계속 눌러서 생성
- 4. 안드로이드 아이콘 클릭

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

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


- 7. 안드로이드 스튜디오에서 project 수준의 build.gradle 파일 plugins 블럭에 아래 코드 추가 후 sync now(버전이 변경 될 수 있으니 firebase 사이트 참고해서 하기)
- id("com.google.gms.google-services") version "4.3.15" apply false
- 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
'Android' 카테고리의 다른 글
[Android] Main Activity 인식 불가 문제 해결 (0) | 2023.08.07 |
---|---|
[Android] MVVM 구조 (0) | 2023.08.02 |
[Android] Retrofit (0) | 2023.07.27 |
[Android] Image view에 등록된 사진이 안보이는 Error (0) | 2023.07.27 |
[Android] ViewPager2 Fragment 안보이는 Error (0) | 2023.07.27 |