본문 바로가기
Android Application/기초 사용법

안드로이드 Firebase Cloud Firestore database 생성, 연동, 사용법

by sdchjjj 2023. 4. 6.
728x90

안녕하세요.

이번 포스팅에서는 안드로이드 스튜디오 프로젝트에 파이어스토어 데이터베이스를 연결하고, 간단하게 사용해 보겠습니다.

 

언어: 코틀린

sdk vsersion

  - compile: 33

  - min: 21

  - target: 33

 

- Firebase Firestore database 생성

가장 먼저 파이어베이스 페이지에 들어가 시작하기를 누르고 프로젝트를 생성합니다(figure1, figure2 참조).

https://firebase.google.com/?hl=ko 

 

Firebase

Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이 되는 Google의 모바일 플랫폼입니다.

firebase.google.com

figure1. firebase page
figure2. add project

이름을 정하고 3/3까지 계속을 눌러줍니다. 3/3단계에서 account를 Default Account for Firebase로 선택해 주고 프로젝트 만들기를 클릭합니다(figure3, figure4 참조).

figure3. 프로젝트 만들기 1/3단계
figure4. 프로젝트 만들기 3/3단계

로딩이 끝나면 계속을 눌러줍니다(figure5 참조).

figure5. firebase project ready

 

왼쪽 창에서 빌드 탭을 선택하고 Firesotre Database를 클릭합니다(figure6 참조).

figure6. select Firestore Database

데이터베이스 만들기를 클릭합니다(figure7 참조).

figure7. create database

"테스트 모드에서 시작"을 선택하고 다음을 클릭합니다(figure8 참조).

지금은 사용하는데 문제가 없지만 추후에 allow read, write: if의 코드를 수정할 필요가 있습니다.

일단 이대로 사용을 하겠습니다.

figure8. select test mode

Cloud Firestore 위치는 연동되는 앱이 실행될 국가의 도시를 선택합니다. 저는 한국이므로 서울을 선택하겠습니다(figure9 참조).

다른 나라의 도시를 선택해도 동작에는 상관없으나 속도가 느려질 수 있습니다.

※ 이 설정은 나중에 수정할 수 없으니, 잘 선택해야 합니다.

figure9. select location

데이터베이스를 사용할 준비가 끝났습니다.

패널 뷰에서 데이터베이스의 구조를 확인할 수 있습니다(figure10 참조).

이후에 앱에서 넣는 데이터를 여기서 확인합니다.

figure10. database pannel view

 

- Firebase Firestore database 연동

파이어베이스 프로젝트의 왼쪽 창에서 톱니바퀴 버튼을 누르고 프로젝트 설정을 선택합니다(figuer11 참조).

figuer11. project configuration

아래쪽에 있는 내 앱 탭에서 안드로이드 아이콘을 클릭합니다(figure12 참조).

figure12. select android icon

Android 패키지 이름란에 연동할 프로젝트 패키지명을 입력하고 앱 등록을 클릭합니다(figure13 참조).

패키지명은 AndroidManifest.xml에서 확인할 수 있습니다.

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.contents.laboratory">
    ...
</manifest>

 

figure13. register app

google-services.json 다운로드를 클릭하여 파일을 다운로드합니다(figure14 참조).

figure14. download google-services.json

다운로드한 google-services.json 파일을 안드로이드 스튜디오 프로젝트의 app module directory에 넣어줍니다(figuer15 참조).

figure15. copy google-services.json

파일을 넣고 gradle sync를 진행해 줍니다.

 

안드로이드 스튜디오에서 tools > Firebase를 선택하면 오른쪽에 Firebase 관련 Assistant가 노출됩니다.

여기서 Could Firestore를 선택하고 Get started with Could Firestore를 선택합니다(figure16 참조).

figure16. firebase assistant

Add the Cloud Firestore SDK to your app을 클릭합니다(figure17 참조).

figure17. add cloud firestore sdk

이후 발생하는 팝업창에서 Accept Changes를 선택합니다(figure18 참조).

figure18. accept changes

연결이 끝났으며, 사용할 준비를 마쳤습니다.

 

- Firebase Firestore database 사용

데이터베이스에 넣을 데이터 클래스를 작성합니다.

FirebaseData.kt

data class FirebaseData(
    val sampleName: String,
    val sampleNumber: Int,
    val sampleBoolean: Boolean
)

 

MainActivity에서 데이터를 생성하여 데이터베이스에 올려보겠습니다.

activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

    <Button
        android:id="@+id/button_set"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="set"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>
    
    <TextView
        android:id="@+id/text_result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

 

MainActivity.kt

class MainActivity : AppCompatActivity() {

    private var _binding: ActivityMainBinding? = null
    private val binding get() = _binding!!

    private var sampleNumber = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        _binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        setDocument(
            FirebaseData(
                sampleName = "firstData",
                sampleNumber = sampleNumber,
                sampleBoolean = false

            )
        )
        binding.buttonSet.setOnClickListener {
            sampleNumber++
            setDocument(
                FirebaseData(
                    sampleName = "sampleData$sampleNumber",
                    sampleNumber = sampleNumber,
                    sampleBoolean = true
                )
            )
        }
    }

    private fun setDocument(data: FirebaseData) {
        FirebaseFirestore.getInstance()
            .collection("sampleCollection")
            .document(data.sampleName)
            .set(data)
            .addOnSuccessListener {
                binding.textResult.text = "success!"
            }
            .addOnFailureListener {
                binding.textResult.text = "fail!"
            }
    }
}

간단하게 collection과 document id를 설정해 주고 data를 set 해주면 됩니다.

 

의도한 동작은 처음 앱 실행 시 첫 번째 데이터를 database에 set 해줍니다.

그 후, set 버튼을 클릭하면 sampleNumber가 1 더해지고 이를 사용해 FirebaseData를 생성합니다.

생성한 data를 database에 set 해주는데, data의 sampleName으로 document id를 생성합니다.

그리고 set을 성공하면 가운데에 success를, 실패하면 fail을 출력합니다.

 

에뮬레이터를 실행하고 패털 뷰를 확인하겠습니다.

 

처음 앱을 실행하고, 패널 뷰에서 새로고침 해보면 첫 번째 데이터가 무사히 들어가 있습니다(figure19 참조).

figure19. first data set
figure20. run

무사히 데이터가 쌓이고 있습니다.

 

혹시 아래와 같은 메시지를 출력하며 set이 안되고, success도 fail도 안 불릴 때가 있을 수 있습니다.

Firestore: (24.4.5) [WriteStream]: (6456c3e) Stream closed with status

그럴 땐 File > Invalidate Caches... 를 진행하고 다시 실행하면 정상적으로 동작됩니다.

 

이상 포스팅을 마치겠습니다.

 

감사합니다.

728x90

댓글