Open1

Firestoreで簡単にデータベースを作る

るるすたるるすた

Firebaseの導入

以下記事が参考になると思います!
https://zenn.dev/rucco/scraps/4696d9153b3ab3

firestore設定

Firebaseが使えるようになった。。。体で話を進めます。
Firebaseのホーム画面にある作成済みのプロジェクトを選択。

プロジェクトがない場合は、新規作成する。
よくわからなければ、手前のFirebaseの導入を見る!

左のサイドバーにあるメニューから構築>Firestore Databaseを選択

データベースの作成をクリック

ロケーションはTokyoかOsakaを選択(どこでもいいのかも)

開発中は「テストモード」にしておきます
(30日でステータスを変更する必要があるので注意!)

こんな感じの画面がでたらデータベースの作成完了です!

アプリ側からデータを追加していきます!

依存関係追加

いつもの依存家計を追加していきます。
Firebase導入時に、Firebase系の依存関係はすでに追加してある前提となっています。

libs.versions.toml

[libraries]
firebase-firestore-ktx = { module = "com.google.firebase:firebase-firestore-ktx" }

build.gradle.kts(Module:app)

dependencies {
    //firestore(firebaseの中で使っていく)
    implementation(libs.firebase.firestore.ktx)

→SyncNow!!!

Firestoreにデータを追加

ViewModelにデータを保存する関数を作成します。

    fun saveRecruit(
        onSuccess: () -> Unit,
        onError: (String) -> Unit
    ) {
        //FirebaseのFirestoreに保存する
        val recruitData = hashMapOf(
            "appName" to  uiState.value.appName,
            "appIcon" to uiState.value.appIcon.toString(),  //Uriを文字列に変換
            "status" to uiState.value.status.fireStoreLabel,   //募集中・募集終了とか
            "description" to uiState.value.description,
            "groupUrl" to uiState.value.groupUrl,
            "appUrl" to uiState.value.appUrl,
            "webUrl" to uiState.value.webUrl,
            "postedAt" to System.currentTimeMillis()
        )
        Log.d("ruruV","Firestoreに保存します:$recruitData")
        Firebase.firestore.collection("recruit")
            .add(recruitData)
            .addOnSuccessListener {
                Log.d("ruruV","成功!")
                _isSaved.value = true
                onSuccess()
            }
            .addOnFailureListener {
                Log.d("ruruV","失敗。。。")
                _isSaved.value = false
                onError(it.message ?: "保存できませんでした。。。")
            }
    }

■UIから上記関数を呼び出す場合(あくまでも一例です)

        //テスター募集新規登録
        composable(Screen.RecruitNew.route) {
            val viewModel: RecruitNewViewModel = hiltViewModel()
            val uiState: RecruitUiState by viewModel.uiState.collectAsState()
            val isSaved by viewModel.isSaved

            RecruitNewScreen(
                //他の呼び出し
                onSaveClick = {
                    Log.d("ruruS","保存ボタンが押されました")
                    viewModel.saveRecruit(
                        onSuccess = {
                            navController.navigate(Screen.RecruitList.route)
                        },
                        onError = { message ->
                            Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
                        }
                    )
                },
            )
        }

データが登録されると

以下のようにFirestoreにデータがたまっていきます。

自分でデータベースを構築しなくていいなんて、もう夢のようなサービス!!!!!
Googleってすごいなぁ