🔰環境構築 - Ki-Kobayashi/Android-Wiki GitHub Wiki

🟩 Firebaseの概要

※「🌟」箇所が当Wikiの解説で取り入れてるもの

  • 🌟 Firebase Authentication: パスワード、電話番号、一般的なフェデレーション ID プロバイダ(Google、Facebook、Twitter)などを使用した認証機能。
  • 🌟Cloud Firestore: モバイルアプリやWebアプリデータの保存、同期、参照が可能であるデータベース 。
  • Realtime Database: Cloud Firestoreが登場する前から利用されてきたFirebase上で利用できるデータベース 。
  • 🌟 Cloud Storage: ファイルの保存、管理、配信を行うためのストレージサービス。
  • Cloud Functions: Firebaseの機能などによって発生したイベントに応じてコードを実行するフレームワーク。
  • Hosting; Webアプリなど様々なコンテンツを公開することができるサービス。

https://www.ubsecure.jp/blog/20231020

🟩必要なライブラリを追加する

https://firebase.google.com/docs/android/setup?authuser=0&hl=ja#assistant

🟡 【追加なし】build.gradle(:proj)

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id("com.android.application") version "8.2.0" apply false
    id("org.jetbrains.kotlin.android") version "1.9.0" apply false
    id("com.google.dagger.hilt.android") version "2.48" apply false
    id("com.google.devtools.ksp") version "1.9.0-1.0.12"
}

🟡 【💡箇所追加】build.gradle(:app)

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("com.google.devtools.ksp")
    id("com.google.dagger.hilt.android")
}

android {
    namespace = "com.example.instagramdemo"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.instagramdemo"
        minSdk = 28
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary = true
        }
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
    buildFeatures {
        compose = true
    }
    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.1"
    }
    packaging {
        resources {
            excludes += "/META-INF/{AL2.0,LGPL2.1}"
        }
    }
}

dependencies {

    implementation("androidx.core:core-ktx:1.12.0")
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
    implementation("androidx.activity:activity-compose:1.8.2")
    implementation(platform("androidx.compose:compose-bom:2023.08.00"))
    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.ui:ui-graphics")
    implementation("androidx.compose.ui:ui-tooling-preview")
    implementation("androidx.compose.material3:material3")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
    androidTestImplementation(platform("androidx.compose:compose-bom:2023.08.00"))
    androidTestImplementation("androidx.compose.ui:ui-test-junit4")
    debugImplementation("androidx.compose.ui:ui-tooling")
    debugImplementation("androidx.compose.ui:ui-test-manifest")

    // 【Coil】Kotlin コルーチンを基盤とする Android 用の画像読み込みライブラリ
    //  https://github.com/coil-kt/coil/blob/main/README.md
    implementation("io.coil-kt:coil-compose:2.5.0")

    // 💡【FireBase】使用に必要なライブラリ
    //    💡【firebase-bom】Firebase ライブラリのバージョンを管理し、アプリで常に互換性のあるライブラリ バージョンが使用されるようにできる
    // implementation("com.google.firebase:firebase-auth:22.1.2")
    implementation(platform("com.google.firebase:firebase-bom:32.3.1"))
    implementation("com.google.firebase:firebase-auth-ktx")
    implementation("com.google.firebase:firebase-firestore-ktx")
    implementation("com.google.firebase:firebase-storage-ktx")


    val room_version = "2.6.1"
    implementation("androidx.room:room-runtime:$room_version")
    annotationProcessor("androidx.room:room-compiler:$room_version")
    ksp("androidx.room:room-compiler:$room_version")
    implementation("androidx.room:room-ktx:$room_version")

    // TODO: Composeで使用するときは、「2.48以上」にしないとエラーがになる
    val hilt_version = "2.48"
    implementation("com.google.dagger:hilt-android:$hilt_version")
    ksp("com.google.dagger:hilt-android-compiler:$hilt_version")
    implementation("androidx.hilt:hilt-navigation-compose:1.1.0")

    val nav_version = "2.7.6"
    implementation("androidx.navigation:navigation-compose:$nav_version")

    val coroutine_version = "1.7.3"
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutine_version")

    implementation ("io.coil-kt:coil-compose:2.5.0")
}


🟡 Sync Now

🟡 この時点で、一度Buildしておく

🟩 FireBaseとASのProjを接続する

  1. ASの「Tools > Firebase > cloud Firestoreを選択」
  2. 「GetStarted with Cloud Firestore」を選択
  3. 「Connect to Firebase」を選択
  4. Firebaseでプロジェクトを作成(https://tokku-engineer.tech/create-pj-flutterfirebase-ios-android-initial/)
  5. 一旦Firebaseを閉じる
  6. 1~3の手順を繰り返し、コンソールが開いたら、4で作成したプロジェクトを選択
  7. 接続をクリック(下画像になれば接続完了) image

🟩 認証機能を有効にする

  1. Firebaseのコンソールを開き、接続中のプロジェクトを開く
  2. 左ペインの「構築(build)」から、「Authentication」を選択 > [はじめる]
  3. 例えば、「Email と password」の認証を選ぶとする
    image
  4. 次画面で、上のみ有効(下のを有効にしても複雑になるだけ)にし、[保存]する

🟩 Firestoreを有効にする

  1. 左ペインの「構築(build)」から、「Firestore」を選択 > [データベース作成]をクリック
  2. リージョンをTokyoに設定
    image
  3. 「テストモードで開始する」を選択 (テストモードでは、アプリ未公開) image
  4. 「作成」をクリック

🚨本番環境では、より複雑なセキュリティルールの設定が必要(有識者と決めていく必要がある)

🟩 Storage を有効にする

  1. 左ペインの「構築(build)」から、「Storage 」を選択 > [はじめる]をクリック
  2. 「テストモードで開始する」を選択(テストモードでは、アプリ未公開)

🚨本番環境では、より複雑なセキュリティルールの設定が必要(有識者と決めていく必要がある)

🟩 AS の Project に Firestore SDK を追加する

  1. ASの「Tools > Firebase > cloud Firestoreを選択」
  2. 「GetStarted with Cloud Firestore」を選択
  3. 「Add cloud Firestore your App」を選択」

image

※出てきたDialogで、「Accept」をクリック。(同期されるのを待つ)
※下記のようになればOK
image

🟩 AS の Project に Cloud Storage SDK を追加する

  1. ASの「Tools > Firebase > cloud storage for Firebase を選択」

  2. 「Get Started with Cloud Storage」を選択
    image

  3. 「Add cloud Storage to your App」を選択」
    image

  4. [Accept]をクリック

🟩 ここで一旦、ビルドしてみる

下記のようなエラーが出たら、app:build.gradleに、implementation()でFirebase関連が重複している可能性がある
🌟解決策🌟

  1. 重複削除
  2. SyncNow
  3. Build clean
  4. Make project
Duplicate class com.google.firebase.firestore.ktx.FirestoreKt$snapshots$1$1 found in modules firebase-firestore-24.10.1-runtime (com.google.firebase:firebase-firestore:24.10.1) and firebase-firestore-ktx-24.8.1-runtime (com.google.firebase:firebase-firestore-ktx:24.8.1)
Duplicate class com.google.firebase.firestore.ktx.FirestoreKt$snapshots$2 found in modules firebase-firestore-24.10.1-runtime (com.google.firebase:firebase-firestore:24.10.1) and firebase-firestore-ktx-24.8.1-runtime (com.google.firebase:firebase-firestore-ktx:24.8.1)
   .
   .
   .

🟩

🟩

🟩

🟡