🔰環境構築 - 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を接続する
- ASの「Tools > Firebase > cloud Firestoreを選択」
- 「GetStarted with Cloud Firestore」を選択
- 「Connect to Firebase」を選択
- Firebaseでプロジェクトを作成(https://tokku-engineer.tech/create-pj-flutterfirebase-ios-android-initial/)
- 一旦Firebaseを閉じる
- 1~3の手順を繰り返し、コンソールが開いたら、4で作成したプロジェクトを選択
- 接続をクリック(下画像になれば接続完了)
🟩 認証機能を有効にする
- Firebaseのコンソールを開き、接続中のプロジェクトを開く
- 左ペインの「構築(build)」から、「Authentication」を選択 > [はじめる]
- 例えば、「Email と password」の認証を選ぶとする
- 次画面で、上のみ有効(下のを有効にしても複雑になるだけ)にし、[保存]する
🟩 Firestoreを有効にする
- 左ペインの「構築(build)」から、「Firestore」を選択 > [データベース作成]をクリック
- リージョンをTokyoに設定
- 「テストモードで開始する」を選択 (テストモードでは、アプリ未公開)
- 「作成」をクリック
🚨本番環境では、より複雑なセキュリティルールの設定が必要(有識者と決めていく必要がある)
🟩 Storage を有効にする
- 左ペインの「構築(build)」から、「Storage 」を選択 > [はじめる]をクリック
- 「テストモードで開始する」を選択(テストモードでは、アプリ未公開)
🚨本番環境では、より複雑なセキュリティルールの設定が必要(有識者と決めていく必要がある)
🟩 AS の Project に Firestore SDK を追加する
- ASの「Tools > Firebase > cloud Firestoreを選択」
- 「GetStarted with Cloud Firestore」を選択
- 「Add cloud Firestore your App」を選択」
※出てきたDialogで、「Accept」をクリック。(同期されるのを待つ)
※下記のようになればOK
🟩 AS の Project に Cloud Storage SDK を追加する
-
ASの「Tools > Firebase > cloud storage for Firebase を選択」
-
「Get Started with Cloud Storage」を選択
-
「Add cloud Storage to your App」を選択」
-
[Accept]をクリック
🟩 ここで一旦、ビルドしてみる
下記のようなエラーが出たら、app:build.gradleに、implementation()でFirebase関連が重複している可能性がある
🌟解決策🌟
- 重複削除
- SyncNow
- Build clean
- 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)
.
.
.
🟩
🟩
🟩
🟡